我继承了一个 Xcode 设置,它构建了一个使用自动签名进行开发构建的 iOS 应用程序。我现在的任务是为这个项目构建一些 CI 设置,但不改变实际的 Xcode 项目。这意味着我暂时无法切换到手动签名。
由于项目在本地构建良好,我没想到这会成为一个大问题,但事实证明,自动签名(显然,事后看来)需要将您的 Xcode 登录到 Apple ID(Xcode => Preferences => Accounts) 应该用于自动创建证书。
有没有办法通过命令行将 Apple ID 添加到 Xcode?p>
这是我已经做过的:
我已经环顾四周,但无法通过 Google 找到任何明显的答案。 StackOverflow 上的所有问题和答案总是提到“只需快速打开 Xcode 并输入您的凭据”,遗憾的是这不适用于我们的 CI 设置。
我找到了 this Jenkins "Xcode Plugin"这使您可以导入可以从 Xcode 导出的 .developerprofile 。但是我的 Java 真的很生疏,我无法完全理解这是否“仅”导入配置文件和身份,或者帐户列表。
我自己玩了一个 .developerprofile ,它似乎在 .zip 文件中包含了帐户信息(以及所有证书等),因此您可以提取文件。这还包括 accounts.keychain 和 accounts.plist ,但它们都用密码加密 - 我不知道如何使用它来获取真实数据在那里进一步调查。
如果您添加一个新的 Apple ID,我还试图找出 Xcode 最初保存信息的位置:它似乎将帐户名和密码以及一些 token 放入您的“登录”(com.apple. gs.xcode.auth.com.apple.account.AppleIDAuthentication.token )和“iCloud”钥匙串(keychain)(Xcode-AlternateDSID 和 Xcode-Token )。我也无法手动重新创建钥匙串(keychain)访问中的现有条目,因为“访问控制”->“此项目的访问组:”在手动创建应用程序密码时总是不同的。将项目复制到要导出的新钥匙串(keychain)中也不起作用,因为 iCloud 钥匙串(keychain)不允许我将内容复制到新钥匙串(keychain)(即使在 iCloud 中禁用钥匙串(keychain)同步后,所以钥匙串(keychain)被命名为“本地项目”)。
Best Answer-推荐答案 strong>
首先,我不确定您尝试做的事情是否是一个好主意。
请记住,如果您要将 Xcode 设置为在每次构建时自动请求 iOS 开发人员证书,并且该构建在不同的机器上执行(例如,托管 CI,例如 Travis 或 Azure Pipelines ),您的 iOS 开发者证书将被吊销并重新生成每次。
更好的选择(在我看来)是通过您的开发人员配置文件导出您的 iOS 开发证书和配置文件,并在您的构建环境中导入开发证书和配置文件。然后,如果需要,更新您的 Xcode 项目以使用您刚刚导入的证书和配置文件。
我认为 FaSTLane 已经可以做到几乎所有这些。如果你正在寻找灵感,Azure Pipelines 具有类似的功能。有一个任务installs a provisioning profile , 其中一个 installs a certificate和一个 builds an Xcode project and allows you to override the certificate and provisioning profiles used when signing your product .
话虽如此,accounts.plist 和 accounts.keychain 可能包含您要查找的信息。这两个文件都使用 AES 加密。
用于加密文件的 key 是使用 PBKDF2(Password-Based Key Derivation Function 2)从密码导出的,使用这些参数:
- 哈希函数:SHA256
- 密码:您的密码
- Salt:密码的字节表示,使用 UTF8 编码
- 哈希迭代次数:33333
- key 长度:10
“魔数(Magic Number)”是 Apple 的 SecKeyDeriveFromPassword 函数使用的默认值,as described here和 implemented here
获得加密 key 后,您可以解密文件。您需要一个初始化向量 (IV),这也是 Apple 使用的默认值 - 一个 16 字节的数组,完全由零组成。
在 C 语言中,您应该能够使用这样的代码来生成加密 key :
要解密数据,请使用:
希望对你有帮助!
关于ios - 如何通过命令行在 Xcode 中登录 Apple ID?,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/54787309/
|