Xcode 8:每个scheme的不同权利导致错误

我发现XCode 8的问题.entitlements文件没有正确引用每个scheme。 基本上,我的发行计划引用了我的Debug .entitlements文件。 这是一个问题,因为我们实施了新的Rich推送通知逻辑,需要使用App组。

我使用两个不同的团队(开发和生产),所以会有两个特定的应用程序组。

任何人都知道如何解决这个问题?

谢谢

我find了解决scheme。 使一个.entitlements文件添加此:

 <key>aps-environment</key> <string>$(APS_ENVIRONMENT)</string> <key>com.apple.security.application-groups</key> <array> <string>$(APP_GROUP)</string> </array> 

然后在目标>生成设置中在签名>代码签名授权中设置相同的.entitlements文件为APS_ENVIRONMENT和APP_GROUP添加用户定义的设置,为每个目标设置正确的组。

所以,基于目标Xcode将使用您为APS_ENVIRONMENT和APP_GROUP设置的内容。

你也可以在plist中做到这一点…今天做了一些惊人的清理。

尽pipeTim的解决scheme大部分都是为我工作的,但是Xcode却不知所措,并表示自动configuration无法解决授权文件的问题。 我不认为它喜欢这个variables。

我们的解决scheme是:

  1. 启用需要访问的每个目标上的所有应用程序组。

启用所有应用程序组

  1. 通过转到项目 – >构build设置,单击“+”button,并select“添加用户定义的设置”,为应用程序组名称定义名为PROJECT_APP_GROUP的项目级用户定义的设置。

用户定义的PROJECT_APP_GROUP设置

  1. 在需要访问您的应用程序组的每个目标的info.plist文件中设置一个variables。

在这里输入图像说明

  1. 然后通过从目标的info.plist文件中获取APP_GROUPvariables,在运行时访问正确的应用程序组。

     + (NSString *)appGroupIdentifier { // this method returns the app group identifier by fetching it from the info.plist file. // this string is dynamic based on build scheme. for instance group.ourApp vs. group.ourApp-dev return [[[NSBundle mainBundle] infoDictionary] valueForKey:@"APP_GROUP"]; } 

要么

现在我想到了,如果您为每个构build设置了预处理器macros,那么执行如下操作可能会更容易:

 + (NSString *)appGroupIdentifier { #ifdef BUILD_DEV return @"group.myApp-dev"; #elif BUILD_STAGING return @"group.myApp-staging"; #else return @"group.myApp"; #endif } 
Interesting Posts