xcode 9 xcodebuild 开启钥匙串共享和推送通知

Posted

技术标签:

【中文标题】xcode 9 xcodebuild 开启钥匙串共享和推送通知【英文标题】:xcode 9 xcodebuild switch on keychain sharing and push notifications 【发布时间】:2017-11-23 09:20:26 【问题描述】:

如何通过 xcodebuild (XCode 9) 打开钥匙串共享和推送通知?有变种吗?

【问题讨论】:

【参考方案1】:

在 xcode 上,点击您的项目,然后点击功能,最后打开钥匙串共享和推送通知

【讨论】:

Dmitry 实际上是在询问xcodebuild,这是用于构建 Xcode 项目的命令行工具。【参考方案2】:

您要通过xcodebuild 直接执行实际上有些棘手。 最简单的事情正是 Claudio 在上面所说的:直接更改目标的 Capabilities 部分中的设置。给他+1!默认情况下,您对目标中的功能所做的更改WILL会在您的所有构建中被采用,除非您使用我下面的方法在构建期间显式更改它们。

如果您只想通过xcodebuild 执行此操作(无需打开 Xcode),请进一步阅读:

如果我们谈论的是构建设置(即编译时选项),那么更改设置可能就像这样简单:

xcodebuild -workspace DmitryWorkspace.xcworkspace -scheme "YourAppName" -showBuildSettings

但由于您实际上是在尝试修改权利和功能(应用程序是否有能力做某些事情),您真正需要做的是拥有不同的.entitlements 文件来切换这些选项。 .entitlement 文件基本上只是 plist 文件的另一个名称,它通常看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>aps-environment</key>
        <string>development</string>
        <key>keychain-access-groups</key>
        <array>
                <string>$(AppIdentifierPrefix)com.myke.TestingSomething</string>
        </array>
</dict>
</plist>

这两个键用于推送通知和钥匙串共享。

要通过xcodebuild 获取权利文件,您可以执行以下操作:

xcodebuild -exportArchive -exportOptionsPlist projectName.entitlements -archivePath test.xcarchive -exportPath .

我自己没有尝试过最后一部分(我宁愿为我自己的项目使用 Claudio 的解决方案),但我通过 related blog posting 阅读了这个解决方案。祝你好运!

【讨论】:

感谢迈克尔·道特曼的回答!是的,我的问题是关于 xcodebuild 而不是 Xcode,因为我需要在 Teamcity 中使用它。我会试试你的决定。 我可以使用两个文件 projectName.plist 和 projectName.entitlements 作为标志 -exportOptionsPlist 吗?例如:xcodebuild -exportArchive -exportOptionsPlist projectName.plist projectName.entitlements -archivePath test.xcarchive -exportPath 如果您运行xcodebuild -help,您将看到exportOptionsPlist 文件的选项。它似乎没有提供任何指定权利的方法,所以我认为最后一点在这个答案中不起作用。唯一似乎可以设置的权利是iCloudContainerEnvironment【参考方案3】:

通过将授权文件“push.entitlements”放在根目录并在 xcodebuild 归档命令中添加 CODE_SIGN_ENTITLEMENTS="push.entitlements" 对我有用。

xcodebuild archive -project yourproject -scheme yourscheme -configuration Release -sdk iphoneos -archivePath \"yourpath" CODE_SIGN_IDENTITY=\"$code_sign_identity\" PROVISIONING_PROFILE_SPECIFIER=\"$provisioning_profile\" CODE_SIGN_STYLE=\"Manual\" CODE_SIGN_ENTITLEMENTS=\"push.entitlements\"

我从这篇文章中得到了这个想法:Post ios10 / Xcode 8.0 "Missing Push Notification Entitlement" error after build for iTunes Store

【讨论】:

以上是关于xcode 9 xcodebuild 开启钥匙串共享和推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins - Xcode 构建工作代码设计失败

使用无人值守的 xcodebuild 管理钥匙串以协同设计 macOS / iOS 应用程序

xcodebuild & xcrun & xctool 脚本打包

无效的 Swift 支持 - 适用于 iOS 9 的 Swift 2.0 项目,(Xcode build 7A220)

Xcode 10.1 在尝试将应用程序侧加载到带有 iOS 12.1 的设备后未能创建配置文件

xcodebuild 比 Xcode 慢得多?