我發現XCode 8的問題,其中.entitlements文件未被正確引用的每個方案。基本上,我的發佈方案引用了我的Debug .entitlements文件。這是一個問題,因爲我們實施了新的Rich推送通知邏輯,並且需要使用App組。Xcode 8:每個方案的不同權利導致錯誤
我使用兩個不同的團隊(開發和生產),所以會有兩個特定的應用程序組。
任何人都知道如何解決這個問題?
謝謝
我發現XCode 8的問題,其中.entitlements文件未被正確引用的每個方案。基本上,我的發佈方案引用了我的Debug .entitlements文件。這是一個問題,因爲我們實施了新的Rich推送通知邏輯,並且需要使用App組。Xcode 8:每個方案的不同權利導致錯誤
我使用兩個不同的團隊(開發和生產),所以會有兩個特定的應用程序組。
任何人都知道如何解決這個問題?
謝謝
我找到了解決方案。請一個.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中做到這一點...今天做了一些驚人的清理。
我在過去的一年左右使用了這個解決方案,但發現偶爾蘋果開發中心會顯示一些捆綁ID與錯誤的組關聯,這可能會破壞手動代碼簽名。很多時候我不得不去那裏糾正這種聯繫(只是爲了讓它稍後再改變)。很難理解爲什麼/如何發生,可能取決於我的設置,但直覺是Xcode做自動事情,不喜歡變量。 –
雖然蒂姆的解決方案大多爲我工作,Xcode得到了所有的不安,並表示自動配置無法解決權利文件的問題。我不認爲它喜歡這個變量。
我們的解決方案是:
PROJECT_APP_GROUP
項目級用戶定義的設置 - >構建設置,點擊「+」按鈕,然後選擇「添加用戶定義的設置」。info.plist
文件爲需要應用程式組訪問每個目標的變量。然後在運行時通過從目標的info.plist
文件獲取APP_GROUP
可變訪問正確的應用程序組。
+ (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"];
}
現在我想起來了,如果你有設置爲每個製作預處理宏,它可能更容易做這樣的事情:
+ (NSString *)appGroupIdentifier
{
#ifdef BUILD_DEV
return @"group.myApp-dev";
#elif BUILD_STAGING
return @"group.myApp-staging";
#else
return @"group.myApp";
#endif
}
這種方法的缺點是,你的應用程序在同一時間「使用」所有3個組。當然,你正在控制你的代碼在看哪一個,但是iOS認爲所有的東西都以某種方式被使用。這意味着當您刪除開發應用程序以測試新安裝的某些內容時,它不會清空應用程序組 - 您也必須刪除臨時和推送應用程序。 –
@KieranHarper你是對的,我們在經過一些測試後發現了這一點,並最終採用了更像Tim的方法。 –
這適用於我謝謝! –
我米也有這個問題。儘管在'CODE_SIGN_ENTITLEMENTS'生成設置中進行了正確配置,我們的QA方案試圖將'生產'值用於'aps-environment'權利。 –
@AlbertBori檢查我的答案...它會幫助你。 –