ГенерацияXcode-проекта
讲解
project.pbxproj的Решениепроблемыmerge-конфликтов
是iOS上的“Наверняка”,是“резолва”的merge-конфликтов。 Есликонфликтуютизменениявисходныхфайлах,тотутнетособойболи,всезакономерно。 Xcode-проектаproject.pbxproj中的Другоедело,когдаконфликты,ведьихсложнеерешатьиони。 Носамаябольшаядосадавтом,чтотакиеконфликтынеоправданы,ведьзачастуюонипоявляютсяприпростомдобавленииилиперемещениифайловвсливаемыхветках。
Вчемпроблема?
使用project.pbxproj
васлантельбазойданныхислишкоммногонасебяберет:
- структурупроекта
- настройкипроекта
- настройкикаждоготаргета
- индексациюфайловисходников
Ковсемупрочему, project.pbxproj
属性列表(NeXTSTEP)тере
Такимобразом,индексацияисходныхфайловвproject.pbxprojприводиткконфликтам,которыеневозоое
РазфайлыXcode-проектатакиепроблемные,топорабыихудалитьипрописатьв.gitignore。 Нетпроекта–нетпроблем!
Акактогдадолжнобыть?
Намноголучшеиметьотдельныйфайлдлянастроекпроектасболееудобнымдляредактированияформатомивозможностьюуказатьпапку,иерархияфайловвкоторойиявляласьбыиерархиейисходников。
Ноневсетакпросто:Xcodeничегонезнаетоструктуретакогопроекта,и,соответственно,несможет。 在CocoaPods和Fastlane上创建project.pbxproj
。
Поэтомувыхододин–генерироватьэфемерныйXcode-проектисключительнонавремяразработкиисборки。
Ксчастью,естьготовыерешения,которыекакразудовлетворяютэтимтребованиям:XcodeGen, 结构,Xcake。 Самымпопулярнымсрединих,GitHub的судяпорейтингу, XcodeGen ,евомыиразберемнапримере。
XcodeGen吗?
XcodeGen – XcodeGen –Xcode-проектаинструменткоманднойстроки,
xcodegen生成
Котораяпринимаетследующиепараметры:
-
--spec
:опциональныйпутькфайлуспецификациипроекта。 По-умолчаниюиспользуетсяproject.yml。 -
--project
:опциональныйпутькпапке,вкоторойбудетсгенерированпроект。 По-умолчаниюиспользуетсяпапка,在которойнаходитсяспецификация。 -
--use-cache
:флагиспользованиякэшадляпредотвращениягенерациипроектавслучае,еслиниси -
--cache-path
:опциональныйпутькфайлукэша。 По-умолчаниюиспользуется〜~/.xcodegen/cache/{PROJECT_SPEC_PATH_HASH}
。
Чтотакоеспецификация?
Спецификация–этодокумент,вкоторомописанывсепараметрыпроекта:конфигурации,настройкисбор。
XcodeGen的XAML代码:YAML和JSON。 YAMLЛучшевыбратьпонесколькимпричинам:
- XcodeGen的XcodeGen或используетсяипримерахспецификаций
- используетсявомножестведругихинструментовiOS-разработки(SwiftLint,Jazzy,TravisCI,CircleCI,Codecovит.д.)。
- прощечитаетсяиредактируется
Какустановить?
УстановитьXcodeGen注释:
- 薄荷:
mint install yonaskolb/xcodegen
- спомощьюменеджерапакетов自制软件:
brew install xcodegen
- вручную,скачавzip-архивсвежегорелизаизрепозитория
Имеетсмыслрассмотретьпоследнийвариантвслучае,есливпроектеиспользуетсясивот。 Длялокальнойжегенерацииподойдетлюбойспособ。
КакгенерироватьXcode-проект?
ДлядемонстрациишаговинтеграцииXcodeGen的代码
git clone https://github.com/almazrafi/XcodeGenDemo.git
Далее,откройтепроектиознакомьтесьсегоструктурой。
Онсостоитизодногоэкрана,ноимеетнепростуюконфигурацию,чтопозволитнамзахватитекакоонн
墨西哥
Параметрыпроекта
Создайтевкорневойпапкепроектафайлproject.yml。
名称:XcodeGenDemo
配置:
生产:发布
分期:发布
调试:调试
选项:
minimumXcodeGenVersion:2.3.0
deploymentTarget:
iOS:10.0
defaultConfig:生产
groupSortPosition:顶部
语言:ru
Здесьопределеныпараметрыпроекта,разберемназначениекаждогоизних:
-
name
:XcodeGenDemo,XcodeGenDemo,Xcode-проекта(.xcodeproj)。 -
configs
:Production
,Staging
和Debug
; каждыйизкоторыхимеетопределенныйтипсборки(release
илиdebug)。 -
options
:дляперечисленныхопциипереопределяемповедениепо-умолчанию。 Всегоопцийгораздобольше,сполнымспискомможноознакомитьсяпопрямойссыылке。 -
minimumXcodeGenVersion
:указываем,чтодлягенерациипроектатребуетсяXcodeGenверсиинениже2.3.0。 -
deploymentTarget
:在iOS操作系统中将10.0到вотраничиваемпроекттолькоплатформой。 -
defaultConfig
:Production
(см。configs)的качествеконфигурациипо-умолчаниюдлясборкиизкоманднойстроки(xcode buildxcodebuild build
)。 -
groupSortPosition
:указываем,чтовнавигаторепроектапапкидолжныбытьвверхусписка。 -
developmentLanguage
:UI界面上的устанавливаемрусскийвкачествеязыкатекстов。
Теперьпопробуемсгенерироватьнашпроект,请使用xcodegen generate
Xcodegen的XcodeGenSample.xcodeproj
Всеконфигурациинаместе,нонетниодноготаргета,донихмыдойдемпозже,сначаларазберемсяс。
Настройкисборки
Добавьтевконецфайлаproject.ymlследующиестроки:
设置:
基础:
SWIFT_VERSION:5.0
TARGETED_DEVICE_FAMILY:1
配置:
生产:
ENABLE_TESTABILITY:否
SWIFT_COMPILATION_MODE:整个模块
SWIFT_OPTIMIZATION_LEVEL:-O
VALIDATE_PRODUCT:是
分期:
ENABLE_TESTABILITY:否
SWIFT_ACTIVE_COMPILATION_CONDITIONS:定单
SWIFT_COMPILATION_MODE:整个模块
SWIFT_OPTIMIZATION_LEVEL:-O
VALIDATE_PRODUCT:是
调试:
ENABLE_TESTABILITY:是
SWIFT_COMPILATION_MODE:单个文件
SWIFT_OPTIMIZATION_LEVEL:-Onone
VALIDATE_PRODUCT:否
Это,пожалуй,самаяскучнаячастьспецификации,здесьопределенынастройкисборки,ихструктуратаков
-
base
:базовыенастройкидлявсехконфигураций。 -
configs
:настройки,специфичныедляперечисленныхконфигурацииProduction,Staging
,иDebug; онипереопределяютбазовыенастройки(base
)。
Приэтомсаминастройкиобъявляютсяв“сыром”виде。 显示设置中的“名称 ” , “设置” , “设置” , “设置” , “设置”
,топозволитвидетьназванияизначениянастроеквтомвиде,以及которомихнеобходимоуказатьвспец。
Внимание :Нетнеобходимостипереноситьвсенастройки,навернякамногиеизнихимеютзначенияпо-умол。 Следуетперенеститолькоте,которыедействительноотличаютсявсгенерированноопроекте。
《构建设置参考》中的Еслипокаким-либонастройкамвозникаютвопросы,описаниекнимможнонайти。
Таргеты
Вотмыидобралисьдосамойинтереснойчастиспецификации,ктаргетам。 Всеониперечисляются的targets
,如которомключомявляетсяимятаргета,以及значениемегопарамете。
ДляспецификациинашеготаргетаApp,在project.yml
добавьтевконец。
目标:
应用程式:
类型:应用
平台:iOS
deploymentTarget:10.0
资料来源:
-路径:App
不包括:
-Readme.txt
configFiles:
生产:App / Configuration / Production.xcconfig
登台:App / Configuration / Staging.xcconfig
调试:App / Configuration / Debug.xcconfig
设置:
基础:
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES:$(继承)
CODE_SIGN_IDENTITY:iPhone开发人员
CODE_SIGN_STYLE:自动
DEVELOPMENT_TEAM:LV744N3C27
DEFINES_MODULE:是
INFOPLIST_FILE:App / Info.plist
PRODUCT_BUNDLE_IDENTIFIER:com.self.XcodeGenDemo
TARGETED_DEVICE_FAMILY:1
XCODEGEN_STATE:是
配置:
生产:
ASSETCATALOG_COMPILER_APPICON_NAME:AppIcon
分期:
ASSETCATALOG_COMPILER_APPICON_NAME:AppIconStaging
调试:
ASSETCATALOG_COMPILER_APPICON_NAME:AppIconDebug
方案:
环境变量:
DYLD_PRINT_STATISTICS:1
postCompileScripts:
-脚本:|
如果哪个swiftlint> / dev / null; 然后
swiftlint-无缓存
科幻
名称:SwiftLint
Выглядитмассивно,нонасамомделевседостаточнопросто:
-
type
:указываемтиппродукта–приложение。 .тополеопределяетнастройкисборкипо-умолчанию。 -
platform
:ограничиваемтаргетцелевойплатформойiOS iOS 10.0ввыше。 -
sources
:перечисляемпутикисходнымфайламтаргета。 УнастолькооднапапкаApp,path
которуюмыуказываемвпо。 Чтобыисключитькакие-либофайлыизпроекта,перечисляемихотносительныепутивполеexcludes
,在此显示。 Приэтом,еслипапкаоднаинетисключенийипрочихопций,тоэтуконструкциюможнооонносокраоио: -
configFiles
:указываемсоответствующиепутикфайлам.xcconfigдлякаждойконфигурации。 -
settings
:переопределяемнастройкисборки。 ,тополеужезнакомонампоспецификациипроекта,然后在ниходнаитаже。 -
scheme
:настраиваемавто-генерируемуюсхемутаргета。DYLD_PRINT_STATISTICS
, Есливозможностейданногенедостаточно,对отдельноеполеschemes
Подробнееоеговозможностяхможнопочитатьздесь。 -
postCompileScripts
:перечисляемскрипты,выполняемыепослешагакомпиляцииисходников。 Унашегопроектатокьйскрипт–запускпроверкикодапосредствомSwiftLint, XcodeGenscript
path
script
。
Наэтомспецификациязавершена。 Далее, xcodegen generate
иоткройтеполучившийсяпроект。
Всеполностьюнастроеноиготовокработе,соберитеизапуститеприложение。
Убедившись,чтовсеработает,можносмелодобавитьфайл.xcodeproj或.gitignore
-конфли。
Неужеливсе?
Такимобразом,мыдетальноразобралигенерациюпроектапосредствомXcodeGen。 ,тобезусловномощныйинструмент,возможностикоторогоневозможнопродемонстрироватьоднимпримером。
Отдельностоитотметить,чтоXcodeGenпостояннообновляетсяиактивноразвивается。 Запарунедельподготовкистатьи,从2.3.0到2.5.0。
Начтообратитьвнимание?
Теперь,когда的Xcode-проектсталявлениемвременнымилокальным,необходимопривыкнуть,чтоизменениенастроекпроектаследуетпроизводитьвфайлеспецификации。
Касательнофайловойструктурыпроекта,тутвсепо-старому:добавление,удалениеиперемещениефайловпроисходиткакобычно,таккактеперьихиндексациянеимеетзначения。
Чтосменеджерамизависимостей?
Командам,использующим迦太基,XcodeGenпридетсяособенноподушеиз-завозможноиинеобин Всеостальныешагибудутпроделаныавтоматическипригенерациипроекта。
С的CocoaPodsжесложнее,необходимовыполнятьпереустановкуподов( pod install
)послекаждойгенерациипроекта,чтолегкорешаетсязаменойкоманды xcodegen generate
накомандузапускапростогоскрипта:
#!/ bin / sh
xcodegen generate
pod install
Пока!
Еслиувасосталисьвопросы,будурадпомочьвкомментариях。 Спасибозавнимание。