Ответ 1
По-видимому, ТО решила проблему, но поскольку в этом, похоже, больше людей, заинтересованных в этом, это возможное решение.
Вы можете сделать script для редактирования project.pbxproj, который находится внутри вашего файла xcodeproj (можно просмотреть, например, с опциями "показать содержимое пакета" в finder).
В этом файле есть раздел настроек проекта, называемый секцией PBXProject. Там вы можете добавить возможности для целей. Вам, вероятно, нужно написать собственную логику синтаксического анализа, так как этот файл написан в конфигурационный формат XCode, ничего такого популярного, как XML или JSON.
Часть, которую вы хотите обновить, выглядит следующим образом:
/* Begin PBXProject section */
EB1DDE9C1A3334EC00D778DE /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0610;
/* ...more settings */
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
};
/* ...more settings */
};
/* End PBXProject section */
Вы хотите добавить возможности iCloud в целевые объекты. Это выглядит так:
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
Итак, скажем, вы хотите добавить возможности iCloud к целевому EB1DDEA31A3334EC00D778DE, тогда записи TargetAttributes будут выглядеть следующим образом:
TargetAttributes = {
EB1DDEA31A3334EC00D778DE = {/* this is one target */
CreatedOnToolsVersion = 6.1.1;
DevelopmentTeam = 37QAPDY2PR;
SystemCapabilities = {
com.apple.iCloud = {
enabled = 1;
};
};
};
EB9F6CE11A8812550038355B = {/* another possible target */
CreatedOnToolsVersion = 6.2;
DevelopmentTeam = 37QAPDY2PR;
/* ...more settings */
};
};
Теперь вам нужно определить некоторые вещи, чтобы сделать это:
1. Определите раздел
Я сделаю script искать строку "Начать раздел PBXProject", а затем "TargetAttributes", оба из которых уникальны в файле. Теоретически "TargetAttributes" должно быть достаточно, но лучше быть в безопасности... и не забудьте добавить правильное ведение журнала в script и проверить результаты, потому что эти строки могут легко измениться в будущих версиях XCode (я видел их неизменными, в то время уже).
2. Определите цель
В этом файле есть несколько частей, где вы можете увидеть идентификатор объекта, связанного с именем. Я бы просто посмотрел на это сам и скопировал его в script, так как этот идентификатор не изменится, если вы не воссоздаете цель. Если вам это действительно нужно, вы также можете автоматизировать это... путем поиска вашего целевого имени и формата, в котором он отображается, связанного с идентификатором. Должны быть также другие файлы конфигурации, где эта ассоциация появляется (в этом файле имя просто отображается как комментарий).
3. Обратите внимание на то, что для цели уже есть запись SystemCapabilities, а также что уже есть запись iCloud.
Если у вашей цели есть другие возможности, эта запись может уже существовать. Кроме того, если у вас уже включен iCloud или если вы включили iCloud и отключили его, запись также будет существовать (с значением 0). Это должно быть обработано в script (последнее не должно быть проблемой, если файл проекта является новым, хотя).
Кроме того, вам также, вероятно, придется добавить ссылку на файл с правами. Вы должны добавить это в конфигурацию сборки соответствующих целей. Для этого:
4. Найти идентификатор конфигурации сборки
У вашей цели, вероятно, есть несколько конфигураций сборки, например. отладки и выпуска. Вы должны найти идентификатор конфигурации (ов) сборки, для которой вы хотите добавить ссылку на файл прав. Для этого вам понадобится раздел XCConfigurationList (найдите/* Начало раздела XCConfigurationList */). Посмотрите на идентификатор цели, который мы получили в 1. Затем найдите идентификаторы конфигурации для необходимых конфигураций.
5. Найдите идентификатор конфигурации сборки в разделе XCBuildConfiguration
Перейдите в /* Начните раздел XCBuildConfiguration */и ищите идентификаторы, найденные в 5., затем добавьте путь к правам на buildSettings. Например:
например. у вас есть что-то вроде
EB9F6CF33A861055BB38355B /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B82B36921BDRI3622B0EC99 /* Pods-mytargetname.debug.xcconfig */;
buildSettings = {
/* build settings... */
CODE_SIGN_ENTITLEMENTS = mytargetname/myentitlements.entitlements; /* <-- add this */
};
name = Debug;
};
Обратите внимание, что XCode должен "знать" файл прав (как и остальные файлы вашего проекта).