Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Xcode Meets Gradle
Search
RyuNen344
August 01, 2023
Programming
0
300
Xcode Meets Gradle
RyuNen344
August 01, 2023
Tweet
Share
More Decks by RyuNen344
See All by RyuNen344
サプライチェーン攻撃に備える
ryunen344
0
1.4k
Okioに愛を込めて
ryunen344
3
1.7k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
1.4k
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
330
K/NとNSKeyedArchiverと私
ryunen344
0
440
ComposeのModalBottomSheetは (まだ)沼
ryunen344
1
1.5k
うわっ…もしかして私のコー ド、遅すぎ…?
ryunen344
1
800
K/NでCryptoKit使いたかった
ryunen344
0
360
SwiftPM with KMMをprivateなGitHub Releaseで運用する
ryunen344
0
320
Other Decks in Programming
See All in Programming
Arm移行タイムアタック
qnighy
0
320
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
910
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Figma Dev Modeで変わる!Flutterの開発体験
watanave
0
110
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
AWS IaCの注目アップデート 2024年10月版
konokenj
3
3.3k
Macとオーディオ再生 2024/11/02
yusukeito
0
370
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
520
レガシーシステムにどう立ち向かうか 複雑さと理想と現実/vs-legacy
suzukihoge
14
2.2k
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
130
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
Featured
See All Featured
Writing Fast Ruby
sferik
627
61k
What's in a price? How to price your products and services
michaelherold
243
12k
Designing the Hi-DPI Web
ddemaree
280
34k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Cult of Friendly URLs
andyhume
78
6k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Done Done
chrislema
181
16k
Making Projects Easy
brettharned
115
5.9k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
The Invisible Side of Design
smashingmag
298
50k
Reflections from 52 weeks, 52 projects
jeffersonlam
346
20k
Transcript
Xcode Meets Gradle 2023.08.01 Mobileษڧձ Wantedly × νʔϜϥϘ #10 Bunjiro
Miyoshi
About Me • teamLab Inc.ॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • 6݄ʹങͬͨMacBook ProͷηοτΞοϓΛӬԕʹ์ஔͯ͠Δ্ʹ࠷
ۙങͬͨPixel Fold์ஔؾຯ
͢͜ͱɾ͞ͳ͍͜ͱ • ͢͜ͱ • KMMͷςετΛ࣮ߦ͢ΔࡍͷͭΒΈ • xcode, xctest gradle pluginʹ͍ͭͯ
• gradle-xcodePlugin • ͞ͳ͍͜ͱ • Tink/Obj-Cͷ1.7.0ΛCocoaPodsʹpublishͯ͘͠Εͳ͍͜ͱͷෆຬ • ͦͷ͍ͤͰbazelೖ͢Δ͜ͱʹͳͬͨɾɾɾɾ • xcodebuildίϚϯυɺXCTestͷৄࡉͳ͋Ε͜Ε
Tink KMM࡞ͬͯ·͢
Tink KMM࡞ͬͯ·͢ • Google/TinkΛKMMͰ͑ΔΑ͏ʹ͢Δϥούʔ • android͚JavaɺiOS͚C++(obj-c)Ͱ࣮͞Ε͍ͯΔͷΛ ϥοϓ͍ͯ͠Δ • ͜ΕΛ͑಄ΘͣʹAES-GCM−256Λ͑ΔΑ͏ʹͳΔ
KMMͷςετΛ࣮ߦ͢ΔࡍͷͭΒΈ • iosX64Test, iosSimulatorArm64Test͡ΌͩΊͳͷʁ →Swiftఏڙ͢ΔAPI(Obj-C header)ͷมߋ(Ҿ໊ͱ͔)ΛײͰ͖ͳ ͍ • iOSΞϓϦͰͪΌΜͱಈ࡞͢ΔΑ͏ʹͳ͍ͬͯΔͷ͔ෆ҆ →LinkerपΓͷ࠷ऴతͳ֬ೝ͕͍ͨ͠
KMMͷςετΛ࣮ߦ͢ΔࡍͷͭΒΈ • ͱʹ͔͘iOSͷInstrumented TestΛ͖Ε͍ʹཧ͍ͨ͠ • Android StudioͷProject WizardͰ࡞͢Δͱɾɾɾ • XcodeͰ։͘
• shellͰxcodebuildίϚϯυΛ͏ શ෦GradleͰͳΜͱ͔ͨ͠ʔ͍ʂ
Gradleͱ • JVMͰ࣮ߦͰ͖ΔBuild Tool • ͷ͘͢͝ࡶʹݴ͏ͱiOSͰ͍͏ͱ͜ΖͷFastlane • ϓϩδΣΫτߏɺґଘཧɺϏϧυɺςετͳͲͳΜͰ͜ͳ͢ • ݩʑGroovyͰॻ͘ͷ͕ͩͬͨ࠷ۙKotlinͰॻ͘ͷ͕ਪ͞ΕͯΔ
Gradleͱ • PluginʹΑΔػೳ֦ு͕ڧྗ • *͍͍ͩͨͳΜͰͰ͖Δ • android, KMM(Kotlin Multiplatform)PluginʹΑͬͯͨΒ͞Ε͍ͯ Δ
• ެࣜͷPlugin͕αϙʔτ͍ͯ͠ΔͷͬͯҰମԿ͕ɾɾɾɾʁ
Gradleͱ ͍ͬͺ͍͋Δ😋 (ଞʹ͍ͬͺ͍͋Δ)
macOSͱLinux͚ͷ ͋Ε͜Ε͔͠ͳʔ͍😂
FastlaneͰղܾɾɾɾɾ ͍ɺRubyΛࠞࡏͤͨ͘͞ͳʔ͍😂
OSSͷxcodebuildίϚϯυΛϥοϓͯ͘͠ΕΔ openbakery/gradle-xcodePluginΛΈ߹ΘͤΔ
openbakery/gradle-xcodePlugin • xcodebuildίϚϯυΛϥοϓͯ͘͠ΕΔ • archive, KeyChainपΓͷূ໌ॻཧɺplistಡΈࠐΈ࡞ɺॺ໊ɺ Carthage, CocoaPodsपΓؚΊͯϥοϓ͢Δ • App
Store, Deploy Gateͷ৴Ͱ͖Δ • ෳcon fi gɺschemeΛରԠ͢Δʹͪΐͬͱඞཁ(ࠓճ৮Εͳ ͍)
openbakery Tipsᶃ • gradle-xcodePlugin͕͍͔ͭ͘ͷϏϧυ࣌ڥมΛઃఆ͢Δ͕ૉͷ ··Ͱ௨Βͳ͍ͷͰՃઃఆ͕ඞཁ • DerivedDataPath, DSTROOT, OBJROOT, SYMROOT,
SHARED_PRECOMPS_DIR -> plugin͕GradleͷbuildDirʹมߋ͞ΕΔ • SYMROOT͕มΘΔӨڹͰXCTest࣮ߦ࣌ʹappΛಡΈࠐΊͳ͘ͳΔ
openbakery Tipsᶃ ͓͋ʔ😇
openbakery Tipsᶃ additionalParamʹڥมઃఆΛͯ͠ா৲Λ߹ΘͤΔ
openbakery Tipsᶄ • git cloneͯ͠./gradlew :iosApp:xcodetestΛ࣮ߦࣦͯ͠ഊ͢Δ • ./gradlew xcodetest࣮ߦલʹXCFramework͕ੜ͞Ε͍ͯͳ͍ͷ͕ݪҼ •
KMM pluginͰϓϩδΣΫτΛ࡞Δ߹iOSϓϩδΣΫτ2௨Γͷґଘํ๏ͰKMMΛiOSϓϩδΣΫτʹ Ճ͢Δ • Build PhaseͷRun Script • CocoaPods • Run ScriptͰxcframeworkͷు͖ग़͠λΠϛϯά͕͍ • CocoaPods͍ͷͱ৭ʑͳπϥϛΛ๊͑ΔͷͰ͍ͨ͘ͳ͍(1KMMϥΠϒϥϦͷςετ༻ͱͯ͠໌ Β͔ʹToo Much)
openbakery Tipsᶄ • Gradle TaskͷґଘΛͬͯղܾ͢Δ :iosApp:xcodetestΛ:kmm:assembleXCFrameworkʹґଘͤ͞Δ
openbakery Tipsᶄ tasks.dependsOnͰඞͣXCFrameworkੜ͕ઌʹ࣮ߦ͞ΕΔΑ͏ʹ͢Δ
͜͏ͳͬͨ 👇 Ճ͑ͯIDEͷGradleλϒͰϙνϙνͯ͠XCTestΛ࣮ߦͰ͖ΔΑ͏ʹͳͬͨ (ςετ͚ͩ͡Όͳ͘ɺී௨ͷϏϧυϙνϙνͰ࣮ߦͰ͖Δ)
·ͱΊ • Gradleͷxcode, xctest pluginiOSʹରԠ͍ͯ͠ͳ͍ • ͍͔ͭ͘᠘͕͋Δ͕gradle-xcodePluginΛ༻͢ΕXcodeͱ Android StudioͱTerminalΛߦͬͨΓདྷͨΓ͢ΔճΛݮΒͤͨ •
CI্ͰίϚϯυҰൃͰKMMͷϏϧυͱXCTestͷ࣮ߦ͕Ͱ͖ΔΑ͏ʹ ͳͬͯخ͍͠
࠷ޙʹᶃ GitHubͷStar͍ͩ͘͞😉
࠷ޙʹᶄ LTલʹͦΜͳͰ͔͍Ϳͬ͜·Εͯ😇
Ҿ༻ • https://docs.gradle.org/current/userguide/xcode_plugin.html • https://docs.gradle.org/current/userguide/ xctest_plugin.html#xctest_plugin • https://github.com/openbakery/gradle-xcodePlugin • https://github.com/RyuNen344/tink-kmm/pull/116