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
About triangle
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Smith
February 21, 2017
Programming
0
60
About triangle
This slide presents processes inside of triangle (build button) focused on Unity and Xcode.
Smith
February 21, 2017
Tweet
Share
More Decks by Smith
See All by Smith
Zig なんもわからん 〜あるいは学びのモチベーション〜
dolow
0
360
Go に Generics がやってきた
dolow
0
590
NFT つくってみた
dolow
0
250
プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った
dolow
0
840
技術中間組織はじめました
dolow
0
96
Cipher.Mobile
dolow
0
90
Develop::Client::Game
dolow
1
32
Other Decks in Programming
See All in Programming
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
500
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
株式会社 Sun terras カンパニーデック
sunterras
0
2.1k
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
170
go directiveを最新にしすぎないで欲しい話──あるいは、Go 1.26からgo mod initで作られるgo directiveの値が変わる話 / Go 1.26 リリースパーティ
arthur1
2
540
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
160
Go 1.26でのsliceのメモリアロケーション最適化 / Go 1.26 リリースパーティ #go126party
mazrean
1
380
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
220
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
460
Understanding Apache Lucene - More than just full-text search
spinscale
0
100
Claude Codeログ基盤の構築
giginet
PRO
7
3k
モジュラモノリスにおける境界をGoのinternalパッケージで守る
magavel
0
3.5k
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
260
Exploring anti-patterns in Rails
aemeredith
2
290
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
83
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
180
Why Our Code Smells
bkeepers
PRO
340
58k
Crafting Experiences
bethany
1
83
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
150
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
200
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.7k
The browser strikes back
jonoalderson
0
790
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Are puppies a ranking factor?
jonoalderson
1
3.1k
Transcript
▶ About
fn main { = Smith; me. (); } let me
introduce
Introduce.rs Individual name smith age 33 Employee since 2011 division
Client Architect group Game Architect occupation Engineer rust Beginner // trait は割愛 struct Smith; impl for Smith { fn (&self) -> &'static str { ” " } fn (&self) -> i32 { } } impl for Smith { fn (&self) -> WorkInfo { WorkInfo::Since( ) } fn (&self) -> WorkInfo { WorkInfo::Division(” ") } fn (&self) -> WorkInfo { WorkInfo::Group(” ") } fn (&self) -> WorkInfo { WorkInfo::Occupation(” ") } fn (&self) -> WorkInfo { WorkInfo::Rust(” ") } }
Introduce.rs 自己紹介の安定版 https://github.com/dolow/rust-helloworld
No more Rust today. (ごめんね)
Organization Client Architect Div. Game Architect Group smith
Agenda - Notice - What is Build ? - Inside
Build - Our Build Problem - Solution - Conclusion
Notice 当該資料では C# (Unity) での iOS/Android 向け開発を 前提として進行します
What is Build ? ビルドってなに?
Engineers does build
Engineers does maintain
Why ?
Inside Build 見てみよう
▶
C/C++ /Obj-C object Executable Runtime link compile ▶ Script
.ipa ▶ App
▶
Build for Editor
C# DLL Executable Runtime JIT ▶ compile compile Script
Editor Player DLL ▶ App
Build for iOS
Restriction iOS は厳しい
App Store Review Guidelines 2.5 Software Requirements 2.5.2 Apps should
be self-contained in their bundles, and may not read or write data outside the designated container area, nor may they download, install, or execute code, including other iOS, watchOS, macOS, or tvOS apps. ☓ JIT ✓ AOT
C# DLL Executable IL C++ object Unity Editor Xcode compile
dis- assemble convert compile link Runtime AOT ▶ ▶
iOS C# スクリプト上も Reflection.Emit などの JIT に依存する API は利用できない 実際には書けてビルドも出来るけど
実行時にエラーを吐く
Build for WebGL おまけ
C# DLL Javascript IL C++ LLVM- IR Unity Editor emscripten
compile dis- assemble convert compile convert ▶ ▶
▶ いろいろやってる
1 is enough
Our Build Problem ▶ ▶ それでも困ること
Build Target
“What’s that ?” “I know !”
Build Target - app name - icons - bundle ID
- provisioning profile - versions - run scripts - define symbols 開発用の リリース用の 外部会社に見せる用の 実験的機能開発用の 定期配信する安定版用の
Build Target ☓ ✓ compile option project settings
Solution どうすればいいの?
Solution 1. Knowing Xcode settings 2. Knowing Unity build
Knowing Xcode settings 1. Unity API 2. Info.plist (xml) 3.
project.pbxproj 3 things
Knowing Unity build 1. Preprocess / Postprocess 2. Unity Build
API 3. Applying timing 3 things
Unity build flow ▶ convert setting dto template setting files
apply Default
Unity build flow ▶ convert setting dto template Setting files
apply Preprocess load setting dto Postprocess apply modify modify Customized
iOS is OK ワタシ アイオーエス ビルド チョト デキル
More problems
To be continued…
Conclusion まとめ
Conclusion - コンパイルに関するメンテは稀 - ターゲットビルドの需要が多い - Unity はターゲットビルドに対応していない - Unity
の API で ある程度は対応できる - ビルドスクリプトを作成する必要がある - Android は大変
Enjoy Building ! Thank you !
None
Appendix
Copy resources Compile xib Compile asset catalogs
Process package info Precompile Prefix.pch Compile sources Link Process product packaging Sign app Validate app Things under ▶
Things under Initialize mono Load Unity Define
symbols Compile sources Build Player Compile Assets Process IL2CPP Export Xcode project Post process ▶
Points Linker Flags SDK インストール時に要求されることがある Architectures サポート機種 (iPhone
5s 以上など) によって不要なものを削る Xcode environment variables dSYM を外したりなど C++ settings 他 PF 向けビルド設定と合わせるなど Run Script ビルド後の任意スクリプト処理
Problems 実機ビルドを行う場合は設定範囲が Xcode で完結しない ほとんどの項目が project.pbxproj で管理されている
Solution 実機ビルドを行う場合は設定範囲が Xcode で完結しない → Apple Developer Member Center
に関わる設定を PJ 発足初期に出来る限り固めておく ワイルドカードの App ID は非推奨 ほとんどの項目が project.pbxproj で管理されている → 局所的な設定の変更はPJの問題と割り切り汎用化を避ける Provisioning Profile の差し替えなどは対応する
Points Plugins プラグインのビルド設定 Define Symbols Release / Develop
等のビルドターゲット毎に変更する Scripting backend (mono / il2cpp) 開発時はビルドの速い mono にしたい、など External Project Android は Unity のサポートがほぼ皆無 Build Target ターゲット毎のビルド設定変更
Problems ビルドターゲット Xcode 新規バージョン追従 Third party SDK
Android gradle project (外部プロジェクト書き出し)
Solution ビルドターゲット → batchmode でビルドを行う際のパラメータで補完 Xcode 新規バージョン追従 → 待つしかない
どうしても対応が必要な場合は、PJ 個別で該当箇所のみ対応 Third party SDK → 外部プロジェクトからの Java/Obj-C SDK の利用を推奨 Android gradle project (外部プロジェクト書き出し) → Gradle プロジェクトテンプレートを作成した テンプレート上でアプリ固有の設定を編集するように統一