下面就给大家详细讲解如何上架苹果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
这里要说到一些概念:
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)
加入一个测试手机:
这点,点击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不通过的情况,也就是说不通过一般是配制不到位,不是这里少了,就是这里多了。
这样懂得了原理,我们工作就可以事半功倍了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。