下面就给大家详细讲解如何上架苹果TestFlight
环境: IDE xcode 11.3.1 (11C504)
1、确认您的xcode能顺利编译通过
2、Project-Archive
xcode会自动编译并且打包,并且完成后会弹出Archive对话框
3、点击右侧的Validate App
会自动连接App Store Connect来进行初步的验证。
勾选Strip Swift symbols来 减少 app size
4、选择发布的证书来完成发布(这个要在http://developer.apple.com的account中设置)
好了,下面就会自动检测了,如果不通过会给你一些提示。按提示来修改再次打包就可以了。
下面讲一下,我碰到的问题:
A valid provisioning profile for this executable was not found
字面意思就是app没有一个有效的配制文件
这里要说到一些概念:
Certificates, Identifiers & Profiles
Certificates:证书
Identifies:app的bundle identifier(图1)
Devices:测试设备(比如说你的iphone,ipad等等)
Profiles: 对证书、bundle identifier,devcies的一个总结吧,也就是包括了这些信息,这样你的xcode,还有苹果app store connect才会通过您的认证,
这样你才可以安装到你的测试设备上,或者发布到testflight(公测),最好上架到app store去供用户购买。
证书可以通过xcode来生成:Xcode - Preferences
开发、发布,根据情况来建立。
图1
在苹果开发者网站上,可以建一个app id ( Application Id)
注册一个App IDs:
加入一个测试手机:
这点,点击download, 下载您的设置到本地,然后双击,这样xcode就可以认到了。
这样的话,基本上就完成了设置工作。
下面我们来看一下xcode中,是如何设置的。
Debug与Release设置是一样的,配制文件不一样,一个选择dev,一个选择release。
还有一个地方也是报错,也是我碰到的
最后还得搞一张图,打包的时候一直报错,大体是这样的错,但都跟 libPods-工程名.framework有关系:
1、Invalid Swift Support : The file 工程.app/Frameworks/libPods-工程.framework doesn't have the corrent file type for this location.
2、Invalid Bundle Structure: The binary file '工程.app/Frameworks/libPods-工程.framework' is not permitted. Your app can't contain standalone
executables or libraries, other than a valid CFBundle Executable of Supprted bundles.
以上是我记忆中的解决方法及打包发布到testflight应该处理的。
时间一长就会忘记,还是记录下,当然如果您碰到了相关的问题,希望能帮到您。
不当之处,可以相互学习,共同提高。
下面讲一下打包成功后,上传到Apple Store Connect
打包成功后,可以导出来
然后选择发布证书,然后就可以导出来了。
导出来以后,会有一个ipa文件,这个文件就是我们需要上传的文件,可以安装一个Transporter
第一次打开用您的app id登录,然后将导出的ipa文件,直接拖进去,然后一般通过了Validate App的话,
直接拖进去就可以了,然后再点提交。
提交完后,apple会在很短的时候里,给你回邮件email,还给我发了几个需要调整的地方:
ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothPeripheralUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string
这个意思其实很简单:就是你用的权限中没有明确的指出干嘛用的,也就是在value里面加入一个说明即可
比如,蓝牙是用来连接打印机的
到此上传到App Store Connect就成功了,到此,还需要登录到http://developer.apple.com -- Account
打开会员中心,然后点击App Store Connect,去构建您的项目,这样就可以提交到TestFlight
让专业人员去帮你审核了,审核通过,都会给你发Email。
只要在App Store Connect后台加入测试人员的email
如果没有收到email的话,可以再点击发送邀请,这样就会收到一封邀请,
1)打开邮件,您会看到一个TestFlight前往的按钮,点一下,就会弹出来一个对话框,里面有一个邀请码,拷贝。
2)然后在手机上的TestFlight “兑换”,帖上您的邀请码,确认。
3)然后就可以看到待安装的App了,安装,打开,输入账号密码,开启测试。
下面我们再来看看mac, xcode, 手机,开发者服务(apple),这些家伙究竟是咱根据证书还有配制文件,
来处理一些下载到手机安装,打包发布等等工作的。
Code Signing Identity 是咱个工作原理,这里帖个图:
Xcode 中配置的 Code Signing Identity(entitlements、certificate)必须与 Provisioning Profile 匹配,
并且配置的 Certificate 必须在本机 Keychain Access 中存在对应 Public/Private Key Pair,否则编译会报错。
Xcode 所在的 Mac 设备(系统)使用 CA 证书(WWDRCA.cer)来判断 Code Signing Identity 中 Certificate 的合法性:
若用 WWDRCA 公钥能成功解密出证书并得到公钥(Public Key)和内容摘要(Signature),证明此证书确乃 AppleWWDRCA 颁布,即证书来源可信; 再对证书本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此证书未被篡改过,即证书完整。
Verify Code Signature with Certificate
iOS/Mac 设备(系统)使用 App Provisioning Profile(Code Signing Identity)中的开发证书来判断App的合法性:
若用证书公钥能成功解密出 App(executable bundle)的内容摘要(_CodeSignature),证明此 App 确乃认证开发者发布,即来源可信; 再对 App(executable bundle)本身使用哈希算法计算摘要,若与上一步得到的摘要一致,则证明此 App 未被篡改过,即内容完整。
总结
基于 Provisioning Profile 校验了 CodeSign 的一致性;
基于 Certificate 校验 App 的可靠性和完整性;
启动时,真机的 device ID(UDID)必须在 Provisioning - Profile 的 ProvisionedDevices 授权之列。
无论是 Xcode 对 APP 进行签名打包还是真机运行 APP 进行校验,都使用了基于证书体系的非对称加密机制。
我的理解:
1、我们在xcode中进行了配制,这样xcode就可以通过我们提供的Provisioning Profile证书来安装APP到手机上,
手机上也会有一份这样的配制,不然,启动APP的时候也不会成功。
还记得以前用免费的APP ID进行开发的时候,有时候第二天就过期,有时候过个3,5天过期,一点就一闪,其实是证书过期了,
每次安装APP的时候,都会连网去验证合法性。
2、一般情况下,只要配制到位了,那肯定不会有Validate App不通过的情况,也就是说不通过一般是配制不到位,不是这里少了,就是这里多了。
或者比如说我们手工设置了,就不要让xcode自动生成了。
这样懂得了原理,我们工作就可以事半功倍了。