1. 修改 .xcarchive 的 Info.plist
此处, 如果项目 Bundle Identifier 需要发生改变, 则修改 CFBundleIdentifier 对应的值, 并将 SigningIdentity 改成 Bundle Identifier 对应的证书, 关于此处SigningIdentity的值, 可在钥匙串中找到对应的证书, 查看其信息
2. 修改 App Extension 相关信息
此步是对于项目 target 中如 notification extension 等从属 target, 如果没有 App Extension , 直接可以跳过此步, 查看下一步 修改主target相关信息 。
通过文件夹打开 YourAppName.xcarchive/Products/Applications/YourAppName.app/PlugIns/YourAppNameNotificationServiceExtension.appex , 这里不是标准文件夹, open 命令似乎不起作用,
2.1 修改 Info.plist 相关信息
App Extension 的 Bundle Identifier 是 App 的 Bundle Identifier 加上其对应后缀, 如 notificationserviceextension 。
修改 Bundle Identifier 为对应的值, 这里对应的值是指之前修改 .xcarchive 目录中 Info.plist 的 Bundle Identifier 对应, 如 com.test.www , 这里便是 com.test.www.notificationserviceextension。
2.2 替换 Provisioning Profile
将对应的 Provisioning Profile 拷贝到该目录下替换原来的 Provisioning Profile , 改成相同的文件名 embedded.mobileprovision 。
2.3 修改 archived-expanded-entitlements.xcent
我们通过xcode打开archived-expanded-entitlements.xcent, 其本质就是plist文件,
格式是 teamId.bundle identifier 。
2.4 重签名
用对应的证书对 App Extension 重新签名, 这里的 YourCetificateName 依旧是修改 .xcarchive的Info.plist 里的证书名
codesign -f -s “YourCetificateName” YourAppNameNotificationServiceExtension.appex
3. 修改主target相关信息
与上一步修改 App Extension 步骤基本相同, 只是少一步, 不用修改 archived-expanded-entitlements.xcent 。
3.1 修改Info.plist的相关信息
进入.app目录, 修改Info.plist的Bundle Identifier, 使其与.xcarchive文件对应。
你也可以修改其他一些值, 如网络环境, 是测试环境, 还是生产环境, 这里只是抛砖引玉。事实上, 修改网络环境有方便的方法, 如通过读取粘贴板的文本来切换, 或者写一个辅助程序来打开我们的App, 从而通知切换环境。
3.2 替换Provisioning Profile
将对应的 Provisioning Profile 拷贝到该目录下替换原来的 Provisioning Profile , 改成相同的文件名 embedded.mobileprovision 。
3.3 重签名
用对应的证书对 .app文件 重新签名, 这里的 YourCetificateName 依旧是修改 .xcarchive的Info.plist 里的证书名。
codesign -f -s “YourCetificateName” YourAppName.app
codesign -f -s “iPhone Distribution: Shanghai Laiyifen Co., Ltd.” /Users/marshal/Downloads/WDZForAppStore\ 2019-8-13,\ 11.04\ AM.xcarchive/Products/Applications/WDZForAppStore.app
4. 导出包
xcodebuild -exportArchive -archivePath YourAppName.xcarchive -exportPath $(pwd) -exportOptionsPlist YourExportOptionsPlistPath