Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
potatotips #45: XcodeGenでxcodeprojを卒業する
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takeshi Ihara
November 05, 2017
Programming
1.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
potatotips #45: XcodeGenでxcodeprojを卒業する
https://potatotips.connpass.com/event/70161/
Takeshi Ihara
November 05, 2017
More Decks by Takeshi Ihara
See All by Takeshi Ihara
iOSDC20200921: Feature Flagを適切に分類することでA/Bテストの運用コストを下げる
nonchalant
3
1.4k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装
nonchalant
3
6.4k
iOSDC 20190906: 動画アプリの投げ銭機能における 消耗型課金の仕組みと実装 with 発表ノート
nonchalant
2
650
Sign In with Apple
nonchalant
1
2.5k
iOSDC RejectCon 20180915: Factoryの自動生成によりテストを書きやすくする
nonchalant
1
760
iOSDC 20180902: 小さくはじめる端末管理
nonchalant
2
1k
devsap 20180728: コード生成のススメ
nonchalant
0
150
potatotips #50: iOSは自動生成の夢を見るか?
nonchalant
0
2k
try! Swift Tokyo 2018: Best Docker Container in Swift
nonchalant
1
1.4k
Other Decks in Programming
See All in Programming
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
250
スマート反転とウェブアクセシビリティ
camiha
0
220
そのリトライ、死んだコネクションを使い回していませんか ── GoのHTTPクライアントとHTTP/2を実プロダクト障害から学び直す
myus4a
0
330
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
350
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
9.1k
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
370
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
240
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
220
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
330
Security issues being discussed on Web Platforms
petamoriken
0
1.3k
難しいけど、読めた。- OSSの入口に立った話。
sts11142
0
130
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
540
Deep Space Network (abreviated)
tonyrice
0
340
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
RailsConf 2023
tenderlove
30
1.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
500
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
560
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
The Limits of Empathy - UXLibs8
cassininazir
1
690
New Earth Scene 8
popppiees
4
2.6k
Transcript
XcodeGenͰ xcodeprojΛଔۀ͢Δ potatotips #45
Takeshi Ihara • Recruit Marketing Partners • iOS Engineer •
Twitter: @nonchalant0303 • GitHub: Nonchalant potatotips #45
*.xcodeproj potatotips #45
*.xcodeproj • Target • Build Settings • Framework Search Paths
• Other Linker Flags • Build Phases • Target Dependencies potatotips #45
͜Μͳܦݧ͋Γ·ͤΜ͔ʁ potatotips #45
*.xcodeproj͕ίϯϑϦΫτ ! potatotips #45
*.xcodeproj͕ίϯϑϦΫτ • मਖ਼͢ΔͷʹͦΕͳΓʹ͕͔͔࣌ؒΔ • Ϛʔδʹޭͯ͠fileRef͕ফ͑ͯͨΓ͢Δ • etc. potatotips #45
*.xcodeprojΛཧͨ͘͠ͳ͍ʂ potatotips #45
XcodeGen potatotips #45
XcodeGen • XcodeGen is a command line tool that generates
your Xcode project using your folder structure and a simple project spec. • Create projects on demand and remove your .xcodeproj file from git, which means no merge conflicts! potatotips #45
project.yml → *.xcodeproj $ xcodegen potatotips #45
Target Dependencies StaticDI Presentataion, Domain, Infrastructure, Utility Presentataion Domain, Utility
Domain Infrastructure Infrastructure Utility Utility potatotips #45
project.pbxproj // !$*UTF8*$! { archiveVersion = 1; classes = {
}; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 0589839EF066302FF8381EF1 /* Pods_DomainTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD1D884549577507D3FBD6A /* Pods_DomainTests.framework */; }; 0ECEFC8C0E72FFA519EC2740 /* Pods_InfrastructureTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3285CF508C3CB86BE9DCE8A5 /* Pods_InfrastructureTests.framework */; }; 53174BD72660AA80143107FF /* Pods_StaticDI_Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45709A372BBAB5EC0B10BFF3 /* Pods_StaticDI_Domain.framework */; }; 7720E1165E98C88CC7BA1B17 /* Pods_PresentationTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1427075075D0CFFD058086C1 /* Pods_PresentationTests.framework */; }; 7C0310147FC3B2700128268C /* Pods_StaticDI_Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EB7D94A9CCC16376FF5D112 /* Pods_StaticDI_Presentation.framework */; }; B9661B4B325165B87A0F5268 /* Pods_StaticDI_Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD1C3F976060CDB4B30DD2F1 /* Pods_StaticDI_Infrastructure.framework */; }; BD3B20E49EE2D33D8C566633 /* Pods_StaticDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BED0EFF050F9E406821BF26A /* Pods_StaticDI.framework */; }; BF1073850101 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR1332263601 /* AppDelegate.swift */; }; BF1374745401 /* Utility.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR8713155301 /* Utility.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF1543799701 /* Infrastructure.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR1289457301 /* Infrastructure.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF1744565901 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR6218091901 /* ViewController.swift */; }; BF1919872001 /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR4795479601 /* Domain.framework */; }; BF1980193001 /* InfrastructureTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR5797085901 /* InfrastructureTests.swift */; }; BF2036675501 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR8064748501 /* Presentation.framework */; }; BF2250910101 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2043127501 /* Main.storyboard */; }; BF2445564001 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = VG2858723001 /* LaunchScreen.storyboard */; }; BF2822552901 /* DomainTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR2760474101 /* DomainTests.swift */; }; BF3154421201 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = FR5980633301 /* Assets.xcassets */; }; BF4763127901 /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR1289457301 /* Infrastructure.framework */; }; BF4993005301 /* Utility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR8713155301 /* Utility.framework */; }; BF6069884001 /* UtilityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR9054953201 /* UtilityTests.swift */; }; BF6448005701 /* Domain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR4795479601 /* Domain.framework */; }; BF6463449201 /* Utility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR8713155301 /* Utility.framework */; }; BF6841545201 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR5638879301 /* Log.swift */; }; BF7785221801 /* Presentation.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR8064748501 /* Presentation.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF8144242901 /* Utility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR8713155301 /* Utility.framework */; }; BF8650047401 /* Domain.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = FR4795479601 /* Domain.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; BF8764956401 /* Utility.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR8713155301 /* Utility.framework */; }; BF8779185001 /* Infrastructure.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FR1289457301 /* Infrastructure.framework */; }; BF8884663701 /* PresentationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FR2071871501 /* PresentationTests.swift */; }; potatotips #45
project.yml name: StaticDI settings: base: IPHONEOS_DEPLOYMENT_TARGET: 11.1 targets: StaticDI: dependencies:
- target: Presentation - target: Domain - target: Infrastructure - target: Utility type: application platform: iOS sources: StaticDI settings: INFOPLIST_FILE: StaticDI/Supporting Files/info.plist PRODUCT_BUNDLE_IDENTIFIER: com.nonchalant.StaticDI scheme: testTargets: StaticDITests postbuildScripts: - script: ${SRCROOT}/Pods/SwiftLint/swiftlint autocorrect\n${PODS_ROOT}/SwiftLint/swiftlint lint name: Swiftlint Run Script ... potatotips #45
project.pbxproj project.yml Մಡੑ ! " ίϯϑϦΫτͷൃੜ ස ߴ͍ ͍ ߦ
2123 142 potatotips #45
RIP *.xcodeproj potatotips #45