每个configuration应用程序组权利string在Xcode?

是否有一种简单的方法在Xcode项目中拥有每个configuration的应用程序组权限string?

我们正尝试在两个目标中使用“应用程序组”权限在iOS应用程序和今天的扩展之间共享设置。

我们遇到的问题是,我们使用不同的包和团队标识符来构build应用程序,具体取决于它是企业还是发布版本。

当我使用Xcode 6的Capabilities屏幕时,应用程序组显示为红色字体,而我没有看到单独更改每个configuration的string的方法。

我认为下面的一个会起作用,但我不知道我应该先试一试:

  1. .xcconfig文件
  2. 手动创build权利文件
  3. 构build脚本
  4. 依赖于configuration的plist条目

build议?

您可以为每个configuration使用不同的权利文件。 这可以在Xcode“Build Settings”用户界面中指定,或者通过构buildconfiguration文件(.xcconfig)来完成。

示例xcconfig:

CODE_SIGN_ENTITLEMENTS = Debug.entitlements

CODE_SIGN_ENTITLEMENTS的值指向此configuration的正确权利文件。 您可以在Xcode中创build任意数量的configuration。 默认情况下,Xcode创buildDebug和Release,您可以添加Enterprise,并使用一个构buildconfiguration文件,将CODE_SIGN_ENTITLEMENTS指向Enterprise构build的正确授权文件。

Xcode“Capabilities”用户界面将创build和pipe理以构build产品命名的权利文件。 如果你愿意,你可以直接编辑这个文件。

  1. 为每个构buildconfiguration创build一个XCConfig构buildconfiguration文件。 在这个例子中,我们只使用Debug和Release,添加自己的构buildconfiguration(如Enterprise)很简单。
  2. 如上所述,使用适当的CODE_SIGN_ENTITLEMENTS设置填充xcconfig文件。
  3. 在项目“信息”用户界面中,将生成configuration设置为使用适当的XCConfig文件:

在这里输入图像说明

  1. 您可以通过查看构build产品的代码签名权利构build设置进行确认。 你应该看到这样的东西:

在这里输入图像说明

如果您在那里看到粗体文本,请突出显示构build设置并点击删除 。 这将删除重写您的xcconfig设置的Xcode生成设置。

你可以通过“Build Settings”来设置。 与设置不同的捆绑ID相同。

脚步:

  1. 添加一个新的“用户定义的设置” 在这里输入图像说明
  2. 为每个scheme / config指定“APP_GROUP_ID” 在这里输入图像说明
  3. testing一下,为你的应用程序创build一个IPA并解压。
  4. 检出.app并右键单击,然后select“Show Package Contents”
  5. 查找权利文件。 (如果您无法find授权文件查找.xcent文件并将扩展名更改为.entitlements
  6. validation权利文件中的应用程序组值是否是在步骤2中指定的正确的应用程序组标识。

干杯!

Xcode 8似乎有一个错误,因为这个问题的评论表明。

我想我有一个非常粗糙和危险的,但工作的解决方法。

这个想法是只有一个权利文件,Xcode 8看到,并有一个脚本replace为正在尝试构build的configuration正确的文件。

这个解决方法有很多步骤,并不是所有的都可能是必要的。 我会尝试更新这篇文章,因为获得更多的信息。 如果你敢testing这样的东西,请添加评论。

在重新打开Xcode 8之前,可能还需要删除旧的configuration文件。

在打开Xcode 8之前删除派生的数据也似乎有所帮助。

警告! testing这个你自己的风险。 这可以做到不可撤销的损害

  • 删除所有configuration文件
  • 删除DerivedData

设置这个HACK

  • 将下面的脚本保存到您的项目文件夹中。
  • 在您的项目名称和目标名称中添加MyProject *
  • 修补您的configuration名称
  • 检查此脚本尝试在MyProject.entitlements顶部复制的每个configuration权利文件名
  • 在所有configuration中将MyProject.entitlementsconfiguration为权利文件
  • 对所有目标做同样的事(如果你有例如watchkit应用程序)
  • 在运行脚本之前:
    • 在Xcode中select正确的Scheme
    • closuresXcode

脚本模板:

  #!/bin/bash echo if [ ! -n "$BASH" ] ;then echo Please run this script $0 with bash; exit 1; fi if [ $# -ne 1 ]; then echo echo "ERROR: one of the following expected as parameter: release alpha debug" echo exit -2 fi chosen=$1 echo "You have chosen build configuration $chosen" echo echo "This script is a workaround for Xcode 8 bug in handling different build configs and app groups." echo "(This scenario is most likely not on Apples list of things that developers are expected to do.)" echo echo "See comments in this SO answer" echo "http://stackoverflow.com/a/25734318/1148030" echo echo "1) This script must be run with Xcode 8 shut down." echo "2) All old provisioning profiles will be deteled. Xcode 8 will recreate them with hopefully correct build config." echo echo echo "WARNING: This will delete ALL provisioning profiles for all apps!" echo "WARNING: This will delete ALL MyProject named DerivedData." echo read -n 1 -s -p "Press any key to continue or Ctrl-C to cancel" echo # NOTE ABOUT DELETING DERIVED DATA # Deleting derived data fixes 2 bugs: # 1) Xcode 8 stubbornly generating some distribution profiles for old entitlements files # 2) Install from HockeyApp fails due to signing verification error echo "Deleting derived datas" rm -vrf /Users/pelam/Library/Developer/Xcode/DerivedData/MyProject-* echo echo "Deleting provisioning profiles" rm -v ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision echo echo "Replacing target entitlements files" echo cp -v "./MyProjectTarget/MyProjectTarget.$chosen.entitlements" "./MyProjectTarget/MyProjectTarget.entitlements" || exit -1 cp -v "./MyProjectAnotherTarget/MyProjectAnotherTarget.$chosen.entitlements" "./MyProjectAnotherTarget/MyProjectAnotherTarget.entitlements" || exit -1 echo ADD COPY COMMANDS FOR OTHER TARGETS HERE echo echo "SUCCESS! Now run Xcode and verify that correct profiles are created." echo echo "NOTE:" echo "Running following command after starting Xcode 8 and waiting a bit can show you what appgroup is selected in each profile." echo "There should only the one correct app group or the release group. No duplicates in one file or mixed." echo "If you are not using multiple app groups, you can view the provisioning profile files in text editor to see that they contain correct settings for the configuration you are trying to build" echo "grep -a appgroup ~/Library/MobileDevice/Provisioning\ Profiles/*.mobileprovision" echo echo