Низове за правомощия на група приложения за конфигурация в Xcode?

Има ли лесен начин да имате низове за права за група приложения за всяка конфигурация в Xcode проекти?

Опитваме се да споделим настройки между приложение за iOS и разширение Today, като използваме право на „група приложения“ и в двете цели.

Проблемът, който имаме, е, че изграждаме приложението с различни идентификационни номера на пакети и екипи в зависимост от това дали е корпоративно или версия за версия.

Когато използвам екрана с възможности на Xcode 6, групите приложения се показват с червени букви и не виждам начин да променя низовете за всяка конфигурация поотделно.

Предполагам, че едно от следните ще работи, но не знам кое да опитам първо:

  1. .xcconfig файлове
  2. Ръчно създадени файлове за права
  3. Скрипт за изграждане
  4. Зависещи от конфигурацията записи в plist

Предложения?


person EricS    schedule 30.08.2014    source източник
comment
Замяната на CODE_SIGN_ENTITLEMENTS от .xcconfig файл вече работи от Xcode 8.2.1. Това определено не работи с 8.0 и вероятно 8.1 (не е проверено), така че може да се окаже, че грешката, посочена в някои от отговорите/коментарите, вече е коригирана.   -  person Nicholas H.    schedule 17.01.2017


Отговори (3)


Можете да използвате различен файл с права за всяка конфигурация. Това може да бъде посочено в потребителския интерфейс на Xcode „Настройки за компилиране“ или направено чрез конфигурационни файлове за компилация (.xcconfig).

Пример xcconfig:

CODE_SIGN_ENTITLEMENTS = Debug.entitlements

Където стойността за CODE_SIGN_ENTITLEMENTS сочи към правилния файл с права за тази конфигурация. Можете да създадете колкото искате конфигурации в Xcode. По подразбиране Xcode създава Debug и Release, можете да добавите Enterprise и да използвате конфигурационен файл за компилация, който сочи CODE_SIGN_ENTITLEMENTS към правилния файл с права за компилации на Enterprise.

Потребителският интерфейс на Xcode „Възможности“ ще създаде и управлява файл с права, който е кръстен на вашия продукт за изграждане. Можете да редактирате този файл директно, ако желаете.

  1. Създайте конфигурационен файл за изграждане на XCConfig за всяка от вашите конфигурации за изграждане. За този пример просто ще използваме Debug и Release, лесно е да добавите свои собствени конфигурации за компилация, като Enterprise.
  2. Както е описано по-горе, попълнете xcconfig файловете с подходящите CODE_SIGN_ENTITLEMENTS настройки.
  3. В потребителския интерфейс на проекта „Информация“ задайте конфигурацията на компилацията да използва съответния XCConfig файл:

въведете описание на изображението тук

  1. Можете да потвърдите, като разгледате настройката за изграждане на права за подписване на код за вашия продукт за изграждане. Трябва да видите нещо подобно:

въведете описание на изображението тук

Ако видите удебелен текст там, маркирайте тази настройка за изграждане и натиснете изтриване. Това ще премахне настройката за изграждане на Xcode, която заменя вашата настройка на xcconfig.

person quellish    schedule 08.09.2014
comment
Това изглежда е напълно счупено в Xcode 8. Опитах да задам файлове с потребителски права за всяка конфигурация на компилация в настройките на компилация директно и използвах отделни xcconfig файлове. Xcode запомня последната група приложения, която е очаквал, и не успява последващите компилации, тъй като групата приложения на профила за осигуряване не съвпада. Смаян съм. - person Adam Swinden; 05.10.2016
comment
@AdamSwinden Имам същия проблем! Това не е за вярване. Намерихте ли решение за това? - person damirstuhec; 10.10.2016
comment
@damirstuhec Не наистина за съжаление. Въпреки че открих, че след неуспешно компилиране, ако изтриете и нулирате персонализираните настройки за компилация на права, Xcode презарежда коя група приложения очаква. Открих, че трябва да правите това всеки път, когато промените конфигурацията на компилацията. - person Adam Swinden; 12.10.2016
comment
@AdamSwinden същото тук. :( - person Joseph Lin; 19.10.2016
comment
Как можем да добавим множество групи приложения в различни права? тъй като няма опция за избор на AppGroup отделно за схеми/правомощия за отстраняване на грешки и освобождаване? - person W.S; 08.02.2017

Можете да настроите това чрез „Настройки за изграждане“. По същия начин като при настройването на различни идентификатори на пакети.

стъпки:

  1. Добавете нова „Дефинирана от потребителя настройка“ въведете описание на изображението тук
  2. Посочете "APP_GROUP_ID" за всяка схема/конфигурация въведете описание на изображението тук
  3. Тествайте го, създайте IPA за вашето приложение и го разархивирайте.
  4. Разгледайте .app и щракнете с десния бутон, след което изберете „Показване на съдържанието на пакета“
  5. Потърсете файл с права. (ако не можете да намерите файла с права, потърсете файла .xcent и променете разширението на .entitlements
  6. Проверете дали стойността на групата приложения във файла с права е правилният идентификатор на група приложения, който сте посочили на стъпка 2.

наздраве!

person Mark Dominick Flores    schedule 01.06.2017
comment
Няма документирана причина това да работи. Не е по същия начин като Bundle ID, тъй като Bundle ID е поле info.plist, което по подразбиране се попълва от настройките за изграждане. Полетата за правомощия не са. Няма никаква документация от Apple за настройка на компилация APP_GROUP_ID. Ако това е била недокументирана настройка на компилация, въпросът с недокументираните настройки се премахва без предизвестие. - person Mike Sand; 29.10.2019
comment
APP_GROUP_ID е настройка, дефинирана от потребителя.. просто назовавам дефинираните си настройки с _. Много съм сигурен, че няма да има документация за APP_GROUP_ID, тъй като нейният потребител е дефиниран. наздраве! - person Mark Dominick Flores; 18.03.2020

Xcode 8 изглежда има грешка, както показват коментарите в този въпрос.

Мисля, че имам много грубо и опасно, но работещо решение.

Идеята е да имате само 1 файл с права, който Xcode 8 вижда и скрипт да го замени с правилния файл за конфигурацията, която се опитвате да изградите.

Това решение има много стъпки и не всички от тях може да са необходими. Ще се опитам да актуализирам тази публикация, когато се получи повече информация. Ако се осмелите да тествате нещо подобно, моля, добавете коментари.

Освен това старите профили за осигуряване вероятно трябва да бъдат изтрити, преди да отворите отново Xcode 8.

Изтриването на извлечени данни преди отваряне на Xcode 8 също изглежда помага.

ВНИМАНИЕ! ТЕСТВАЙТЕ ТОВА НА ВАШ СОБСТВЕН РИСК. ТОВА МОЖЕ ДА НАПРАВИ НЕОТМЕНИМА ЩЕТА

  • изтрива всички профили за осигуряване
  • изтрива DerivedData

НАСТРОЙВАНЕ НА ТОЗИ ХАК

  • Запазете този скрипт по-долу в папката на вашия проект.
  • Корекция в името на вашия проект и целевите имена, където се чете MyProject*
  • корекция в имената на вашата конфигурация
  • Проверете имената на файловете с права за конфигурация, които този скрипт се опитва да копира върху MyProject.entitlements
  • Конфигурирайте MyProject.entitlements като файл с права във всички конфигурации
  • Направете същото за всички цели (ако имате напр. приложение watchkit)
  • Before running the script:
    • Choose the correct Scheme in Xcode
    • Затворете Xcode

Шаблонът на скрипта:

    #!/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
person Peter Lamberg    schedule 02.11.2016