Установить xcode "build setting" из терминала?

В любом случае я могу изменить настройку в xcode, не открывая xcode? У меня происходит автоматизированный процесс xcodebuild / xcrun, но мне нужно изменить 1 значение:

Цели> Выберите цель> Настройки сборки> Правила ресурса подписи кода Путь add: $(SDKROOT)/ResourceRules.plist

Я не могу найти файл, в который я мог бы поместить эту строку...

3 ответа

Решение

Что вы можете сделать, это запустить:

xcodebuild -target <target> -configuration <configuration> -showBuildSettings

Эта команда показывает все настройки, которые заполнены для цели и пройденной конфигурации. Найдите название ключа, который содержит $(SDKROOT)/ResourceRules.plist (пусть он называется THE_KEY), а затем попробуйте:

xcodebuild -target <target> -configuration <configuration> THE_KEY=<new_value>

Не гарантируйте, что это будет работать.

Вы можете попробовать pbxproj. Это модуль Python, который помогает вам управлять проектами XCode с помощью командной строки.

Связанная часть вашей проблемы может быть https://github.com/kronenthaler/mod-pbxproj/wiki/flags

Вы можете pip install pbxproj иметь это.

И вот пример, приведенный в официальном репо:

from pbxproj import XcodeProject
# open the project
project = XcodeProject.load('myapp.xcodeproj/project.pbxproj')

# add a file to it, force=false to not add it if it's already in the project
project.add_file('MyClass.swift', force=False)

# set a Other Linker Flags
project.add_other_ldflags('-ObjC')

# save the project, otherwise your changes won't be picked up by Xcode
project.save()

Если вы используете CocoaPods, у вас уже установлен Xcodeproj в качестве зависимости: https://github.com/CocoaPods/Xcodeproj

Вот пример, который печатает изменение для каждой конфигурации сборки (Debug, Release, ...):

      #!/usr/bin/env ruby

require "xcodeproj"

project_path = File.join(File.dirname(__FILE__), 'MultiMarkdown', 'build-xcode', 'libMultiMarkdown.xcodeproj')
project = Xcodeproj::Project.open(project_path)
target = project.targets.select { |t| t.name == "libMultiMarkdown" }.first

new_build_dir = '$SYMROOT/$CONFIGURATION'
outdated_configs = target.build_configurations.select { |c| c.build_settings['CONFIGURATION_BUILD_DIR'] != new_build_dir }

if outdated_configs.empty?
  puts "All up-to-date"
  exit
end

outdated_configs.each do |config|
  old = config.build_settings['CONFIGURATION_BUILD_DIR']
  config.build_settings['CONFIGURATION_BUILD_DIR'] = new_build_dir
  puts "- [#{config.name}]:  Changed `CONFIGURATION_BUILD_DIR` from #{old} to #{new_build_dir}"
end

if project.dirty?
  puts "Saving changes ..."
  project.save
end

Вы можете заменить ключ на CODE_SIGN_RESOURCE_RULES_PATHи измените это. Для всех целей:

      new_path = "path/to/append"
target.build_configurations.each do |config|
  config.build_settings['CODE_SIGN_RESOURCE_RULES_PATH'] += new_path
end

Опять же, поскольку он поставляется с CocoaPods, если у вас есть зависимость, которая в этом нуждается, вы можете использовать почти тот же код в хуке CocoaPods.

Другие вопросы по тегам