大家需要首先明确两个事情:
首先,想开发iOS的App, 你需要有一台Mac, 并且安装上Xcode, 想要在App Store里上架App,你需要有一个开发者的账号,在苹果的开发者网站(developer.apple.com)里缴纳99美刀(相当于交一个入场费吧,对于企业开发者来说,自然是很随意,对于个人开发者来说,T_T)。本文默认大家都已经有了这个开发者账号。
其次,iOS系统和Android不太一样,苹果公司不能容忍没有经过自己认证的App被安装进系统,因此,自己开发的App,如果没有签名的话,是不可能装在手机上的,只可能在模拟器里调试。而想要对App签名,就需要第一个前提里面的开发者账号。
一种是Apple Development,这种证书用于在自己的设备中调试。另外一种是Apple Distribution。distribution顾名思义,就是分布式,用这种证书签名的应用,可以在App Store中上架,被其它人下载安装。
如果你是苹果的开发者,那么肯定在开发者网站上注册了账号,如何使用你的账号对你手头的设备和开发出来的app进行管理,这时需要一个连接工具,这个工具就是provisioning profile。该文件可以在开发者网站上下载,每个用户是独一无二的。开发的时候,可以通过这个文件,选择哪个设备可以运行你的app,以及你的app可以使用哪些app service。开发完app之后,provisioning profile会以签名的方式嵌入到app的bundle里。一个Development Provisioning Profile必须在每一个想在里面运行应用程序代码的设备里安装,如果provisioning file里的信息并不符合某个标准,那么你的app就不能启动。
每一个Provisioning file包含以下三部分内容:
1,Development Certificates:
2,Unique Device Identifiers: 列出来这个app可以运行的设备列表。
3,An App ID: 可以包含“\*”通配符以被具有相似bundle标识符的很多应用使用。
如果你还想了解更多有关provisioning profile的内容,请参考链接:https://medium.com/@abhimuralidharan/what-is-a-provisioning-profile-in-ios-77987a7c54c2
在开发者网站上,点击“Certificates, IDs & Profiles”
在Terminal里面运行
security find-identity -v -p codesigning
得到的结果如下所示:
这是我本机的证书。
1,Mac里的provisioning profile去keychain里找到developer certificate。
2,Xcode用这个certificate给代码签名。
3,设备的UUID和provisioning profile里面的IDs Match。
4,Provisioning profile里的APP ID和app里的bundle identifier匹配。
5,该APP ID所需的各项权利(entitlements)被关联。
6,用来对code签名的私钥和证书里的公钥match
注意,第四步,app的bundle里会有一个info.plist,里面有一个参数时bundle identifier,这个一定要和provisioning profile里面的APP ID匹配,不然是不能运行签名的命令的。
如果你的Xcode链接上了设备,那么当打包完bundle以后,Xcode会自动帮你执行签名也安装。当然,xcode也是调用的shell指令。使用的命令是codesign,下面提供一个简单的demo。
一条示例的codesign命令:
/usr/bin/codesign --force --sign 221427F5D9B40022F33980F081132E2B28C611B4
--entitlements /Users/pyin/Library/Developer/Xcode/DerivedData/demo.xcent
--timestamp=none /Users/pyin/Desktop/workplace/my.app
--sign 后面跟的参数就是用来加密的私钥。签名与认证的过程是非对称加密解密的过程。详情参考链接:https://wereadteam.github.io/2017/03/13/Signature/ 讲得非常详细。
--entitlements 代表授权文件,后面跟的demo.xcent里面写了这个app可以获得的权限
codesign命令还有一些其它参数,详情参考链接:https://www.jianshu.com/p/34cdc0784ea4 讲得也非常详细。
签完名之后,你会发现在签名后的文件夹里面多了一个目录:
下面把.app拖到xcode里,如果验证成功,就可以安装了!