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
Smith
February 21, 2017
Programming
0
59
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
580
NFT つくってみた
dolow
0
250
プロのエンジニアが1人日を捻出してレトロJRPGっぽいゲームを本気で作った
dolow
0
840
技術中間組織はじめました
dolow
0
95
Cipher.Mobile
dolow
0
90
Develop::Client::Game
dolow
1
31
Other Decks in Programming
See All in Programming
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
Vibe Coding - AI 驅動的軟體開發
mickyp100
0
170
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
250
AI & Enginnering
codelynx
0
110
360° Signals in Angular: Signal Forms with SignalStore & Resources @ngLondon 01/2026
manfredsteyer
PRO
0
120
今こそ知るべき耐量子計算機暗号(PQC)入門 / PQC: What You Need to Know Now
mackey0225
3
370
AI巻き込み型コードレビューのススメ
nealle
0
130
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
220
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.5k
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
6k
AI Agent Tool のためのバックエンドアーキテクチャを考える #encraft
izumin5210
6
1.8k
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
0
1.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Practical Orchestrator
shlominoach
191
11k
Documentation Writing (for coders)
carmenintech
77
5.2k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
A Tale of Four Properties
chriscoyier
162
24k
4 Signs Your Business is Dying
shpigford
187
22k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Exploring anti-patterns in Rails
aemeredith
2
250
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 プロジェクトテンプレートを作成した テンプレート上でアプリ固有の設定を編集するように統一