SlideShare une entreprise Scribd logo
1  sur  56
iOS 빌드 자동화 
수동 빌드는 그만 
• 이름 : 이기석 
• 작성일자 : 2014. 11. 18. 
• 이메일 : gsk123120@gmail.com 
• Github: https://github.com/gsk120/UnityAutoBuild_iOS
INDEX 
1. 빌드 자동화 필요성 
2. 구현 방법 
3. 느낀점
Chapter 1 빌드 자동화 필요성 
자동화 이전 
- 반복되는 세팅 
- 긴 시간의 빌드 타임 
- 인간의 실수 
자동화 이후 
- 명령어 한 줄 
- 개발자는 개발만 
- 릴리즈 버전관리 
무엇 보다도 사람이 편해야 한다!
Chapter 1 빌드 자동화 필요성 
목표 
단 하나의 명령어로 원하는 세팅의 빌드가 나오는 것!
Chapter 2 빌드 자동화 구현 
개발 환경 
Xcode 
5.1.1 
Unity 
4.2.2f1 
Ruby 
2.0.0-p247 
Mac OSX 
10.9.5
Chapter 2 빌드 자동화 구현 
 Unity 3D iOS 빌드 과정 
Unity Build 
• Unity를 빌드하여 Xcode 프로젝트를 생성한다. 
Xcode Setting 
• framework, library, app icon, provisioning 등 빌드하기 위한 설정 
Xcode Build 
• Xcode 빌드를 통해 최종적으로 ipa 파일을 추출
Chapter 2 빌드 자동화 구현 
 빌드 목적 
= Rakefile 로 build 스크립트를 만들어 rake만으로 ipa를 얻자. 
 빌드 흐름 
Unity(C#) 
Rakefile 
BuildPlayer pbxproj plist 
executeMethod 
rake Unity 
xcodebuild 
(archive) 
Scheme 
recreate 
xcodebuild 
(export ipa) 
ipa
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
Unity 
Xcode 
Project
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
#{UNITY} 유니티 실행파일의 전체 경로 
• ex) /Applications/Unity/Unity.app/Contents/MacOS/Unity 
• Rakefile의 상수로 정의해 두고 사용
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
-batchmode 커맨드라인으로 유니티를 실행 
• 명령어로 빌드하기 위한 필수 옵션
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
-projectPath 빌드할 유니티 프로젝트의 경로 
• 유니티 프로젝트의 절대경로를 루트 부터 입력 
• ex) /Users/giseok/unity/test_proj
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
-executeMethod 실행할 빌드 함수 
• 빌드를 수행하는 static함수의 이름을 입력한다. (C#으로 이동) 
• ex) ExecuteMethods.IOSBuild
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build 
#{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit 
-quit 함수 실행 후 종료 
• 실행할 함수를 완료한 후 유니티를 종료하는 옵션이다.
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build - excuteMethod 
Xcode 
생성 
ExecuteMethods 
Pbxproj 
수정 
Info.plist 
수정
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build - excuteMethod 
Xcode 
생성 
ExecuteMethods 
Pbxproj 
수정 
Unity에서 제공하는 
BuildPipelie.BuildPlayer 함 
수를 이용하여 빌드! 
Info.plist 
수정
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build - excuteMethod 
Xcode 
생성 
ExecuteMethods 
Pbxproj 
수정 
Unity에서 제공하는 
BuildPipelie.BuildPlayer 
함수를 이용하여 빌드! 
Info.plist 
수정 
BuildPipeline.BuildPlayer ( 
string[] levels, 
string locationPathName, 
BuildTarget target, 
BuildOptions options 
)
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build - excuteMethod 
Xcode 
생성 
ExecuteMethods 
Pbxproj 
수정 
Info.plist 
수정 
Xcode 빌드에 필요한 
framework, Code Signing, 
필요한 파일 import
Chapter 2 빌드 자동화 구현 – 1. unity build 
1. Unity Build - excuteMethod 
Xcode 
생성 
ExecuteMethods 
Pbxproj 
수정 
App 아이콘, URL Type 등 
Info.plist 
수정 
Info.plist 수정
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (2가지) 
 pbxproj 수정 
XocdeProjectModifier 
(ref) https://github.com/gforeman/XcodeProjectModifier 
 Info.plist 수정 
PlistCS 
(ref) https://github.com/animetrics/PlistCS
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 
 빌드에 필요한 framework, library, header, file, folder를 적어둔 파일. 
 유니티 빌드 시 이 파일들을 모두 읽어 Xcode Project를 설정해 준다. 
 따로 폴더에 projmod파일들을 저장해두고, 빌드 시 projmod파일 전 
부를 읽어 자동으로 설정한다. 
 좀더 상세한 내용은 Github의 XcodeProjectModifier 참고.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 (key value) 
* group: Xcode 프로젝트 루트에 해당 이름의 그룹 폴더 생성 후 아래서 지정하는 라이브러리, 프레임워크, 파일 등을 저장 
* libs: dylib와 같은 추가할 라이브러리 입력 
* frameworks: 추가할 framework 입력 => iOS SDK로 부터 해당 프레임워크를 찾음 
* headerpaths: 추가할 헤더파일의 경로를 입력 (실제 헤더파일은 files를 이용해 추가 즉, 경로만 설정해줌) 
* files: 추가할 파일의 리스트를 입력 (코드 및 icon 파일, iOS SDK 외 별도 framework와 .a 파일도 이곳에 추가) 
* folders: 입력한 경로에 있는 폴더를 추가 => 재귀적으로 하위 폴더 및 파일 모두 추가함 
* excludes: 폴더를 추가할 때 추가하지 않아도 되는 파일의 확장자명을 적는 부분
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
iOS SDK에서 제공하는 framework 추가 
{ 
"frameworks": ["MessageUI.framework","StoreKit.framework","iAd.framework", 
"CoreData.framework“,"Security.framework","AdSupport.framework"] 
}
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
광고 SDK와 같은 framework 추가 
{ 
"files": ["/Users/giseok/framework/Partytrack.framework“, 
"/Users/giseok/framework/Adbrix.framework"] 
} 
=> iOS의 framework와는 다르게 files 키워드로 추가한다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
Header 폴더에 필요 소스파일, 헤더파일 추가 (해당 폴더가 없다면 만듬) 
{ 
"group": “Header", 
"headerpaths": ["Editor/iOS/GameCenter/**"], 
"files": ["Editor/iOS/GameCenter/GameCenterController.h", 
"Editor/iOS/GameCenter/GameCenterController.mm", 
"Editor/iOS/GameCenter/GameCenterManager.h", 
"Editor/iOS/GameCenter/GameCenterManager.m"], 
}
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
Libraries 폴더에 필요 앱 아이콘, .a 등 각종 필요 파일 추가 (해당 폴더가 없다면 만듬) 
{ 
"group": "Libraries", 
"files": ["/Users/giseok/resources/Icon-60.png“, 
"/Users/giseok/resources/Icon-72.png“ 
"/Users/giseok/resources/libOMGGameBar.a"], 
}
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
리소스 폴더를 통째로 Xcode 프로젝트에 추가 
{ 
"folders": ["/Users/giseok/resources/API/“, 
"/Users/giseok/resources/Function/“ 
"/Users/giseok/resources/UI/"], 
“excludes“: ["^.*.meta$","^.*.mdown",“^.*.pdf$"] 
} 
- group 키워드를 사용하면 지정한 폴더 내부에 폴더를 추가한다. 
- excludes는 폴더를 추가할 때 필요 없는 파일을 제외시킨다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
라이브러리 파일 추가 
{ 
"libs": ["libsqlite3.dylib"] 
}
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 projmod 파일 – 작성 예시 
{ 
"group": "Services", 
"libs": ["libsqlite3.dylib"], 
"frameworks": ["MessageUI.framework","StoreKit.framework"], 
"headerpaths": ["Editor/iOS/GameCenter/**"], 
"files": ["/Users/giseok/Documents/Partytrack/Partytrack.framework", 
“/Users/giseok/Documents/libOMGGameBar.a", 
"Editor/iOS/GameCenter/GameCenterController.h", 
"Editor/iOS/GameCenter/GameCenterController.mm"], 
"folders": ["iOS/Store/","iOS/GoogleAnalytics/"], 
"excludes": ["^.*.DS_Store$","^.*.meta$", "^.*.mdown^", "^.*.pdf$", "^.*.svn$"] 
} 
- 이렇게 한 파일에 모아도 되고 이전 예시처럼 기능별 관리를 해도 상관 없다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing 
 iOS 심사용 인증서와 개발 테스트용 인증서는 별개로 존재한다. 
 심사용 빌드는 ipa를 설치하여 실행해 볼 수가 없기에 빌드 자동화 시 
개발용 빌드도 함께 빌드 해야한다. 
 overwriteBuildSetting 함수를 사용하여 빌드 타입에 맞는 프로비저닝 
을 설정해 줄 수 있다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing – overwriteBuildSetting 함수 
 overwriteBuildSetting( // 함수 형태 
string settingName, 
string newValue, 
string buildConfigName = “all” 
) 
- settingName에 해당하는 설정을 newValue 값으로 변경 
- buildConfigName으로 Release, Debug 개별 설정
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing – overwriteBuildSetting 함수 
 overwriteBuildSetting( // 함수 형태 
string settingName, 
string newValue, 
string buildConfigName = “all” 
) 
 settingName 
=> 설정해야하는 Code Sign 
=> CODE_SIGN_NAME_IDENTITY[sdk=iphoneos*] 
CODE_SIGN_IDENTITY 
PROVISIONING_PROFILE
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing – overwriteBuildSetting 함수 
 overwriteBuildSetting( // 함수 형태 
string settingName, 
string newValue, 
string buildConfigName = “all” 
) 
 newValue 
=> 변경할 값 
=> CODE_SIGN과 관련된 설정은 인증서 이름으로 설정. 
=> PROVISIONING_PROFILE은 프로비저닝의 UUID로 설정.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing – overwriteBuildSetting 함수 
 overwriteBuildSetting( // 함수 형태 
string settingName, 
string newValue, 
string buildConfigName = “all” 
) 
 newValue 
=> 프로비저닝의 UUID는 프로비저닝 마다 고유. 
=> 프로비저닝 등록 후 
~/Library/MobileDevice/Provisioning Profiles/ 
위 디렉토리에서 확인 가능.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 Code Signing – overwriteBuildSetting 함수 
 overwriteBuildSetting( // 함수 형태 
string settingName, 
string newValue, 
string buildConfigName = “all” 
) 
 buildConfigName 
=> 해당 Code Sign을 적용할 빌드 타입. 
=> Release | Debug | all
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (pbxproj) 
 실제 사용 예시
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 빌드하고자 하는 설정에 맞게 Info.plist를 수정. 
 App icon naming을 설정하여 projmod 파일로 추가한 앱 아이콘이 자동 
으로 등록 되도록 할 수 있다. 
 URL Type을 설정할 수 있다. 
 Github의 PlistCS를 사용하여 간편하게 수정.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 기존 Info.plist 읽기 
var plist = (Dictionary<string, object>)Plist.readPlist(plistPath); 
=> Unity 빌드로 생성된 Info.plist의 경로를 통해 내용을 읽어온다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 Info.plist 변경 (데이터 추가) 
plist[“keyValue"] = new List<object>{ 
new Dictionary<string, object> { 
…… 
} 
}; 
=> 추가하고 싶은 KeyValue를 이용하여 값을 새로 추가한다. 
=> plist 의 <dic>은 Dictionary 타입<array>는 List 타입으로 관리.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 Info.plist 변경 (데이터 수정) 
var CFBundleIconFiles = (List<object>)plist["CFBundleIconFiles"]; 
CFBundleIconFiles.Add(PlistValue.APP_ICON_76); 
CFBundleIconFiles.Add(PlistValue.APP_ICON_120); 
CFBundleIconFiles.Add(PlistValue.APP_ICON_152); 
=> 기존 속성을 변경할 때는 먼저 해당 데이터를 받아온 후 변경한다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 Info.plist 변경 사항 저장 
Plist.writeXml(plist, plistPath); 
=> writeXml 함수를 이용하여 변경된 내용(plist)을 기존 경로(plistPath) 
에 저장한다.
Chapter 2 
빌드 자동화 구현 – 2. Xcode Setting 
2. Xcode Setting (Info.plist) 
 실제 사용 예시
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build 
 Command line을 이용하여 빌드 
 빌드의 2 Step 
- Xcode archive 생성 
- ipa 실행 파일 추출 
=> 둘다 xcodebuild 명령어를 사용하여 수행.
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (xcarchive) 
 Command line 
xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} 
Apple Submit / ipa 파일 추출을 위해 Xcode를 빌드하여 xcarchive를 생성
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (xcarchive) 
 Command line 
xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} 
- project: 빌드할 xcode 프로젝트의 경로를 적어주는 옵션
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (xcarchive) 
 Command line 
xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} 
- scheme: 빌드할 프로젝트 scheme 이름을 적어주는 옵션 
 unity build 후 scheme이 생성되기 전에 아카이브 빌드를 진행하여 에러가 발생하는 경우 존재 
 이 경우 강제로 scheme을 생성해 줘야함 
prj = Xcodeproj::Project.open("#{XCODEPRJ_FPATH}") 
prj.recreate_user_schemes() 
prj.save() 
 Rakefile에 require ‘xcodeproj’를 추가해야함. 
(xcodeproj을 못찾는경우 sudo gem install xcodeproj를 통해 설치) 
 ref: http://stackoverflow.com/a/20941812
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (xcarchive) 
 Command line 
xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} 
- archivePath: 생성한 xcarchive 파일을 저장할 위치를 적어주는 옵션 
=> organizer 메뉴를 사용하기 위해 웬만하면 기존 xcode xcarchive의 디폴트 위치를 적어주자.
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (ipa export) 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
생성한 xcarchive로 부터 ipa 파일을 추출하는 명령어
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (ipa export) 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- exportArchive: 아카이브를 추출하겠다는 옵션
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (ipa export) 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- archivePath: 추출하려는 아카이브의 경로를 입력하는 옵션 
- 이전 xcodebuild로 빌드했던 xcarchive의 경로를 넣어주면 된다.
Chapter 2 
빌드 자동화 구현 – 3. Xcode build 
3. Xcode build (ipa export) 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- exportPath: 추출 결과인 ipa를 저장할 경로를 입력하는 옵션
빌드 자동화 구현 – 3. Xcode build 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- exportFormat: 추출 결과의 format을 선택하는 옵션 
ipa를 추출하기위해 ipa를 입력 
Chapter 2 
3. Xcode build (ipa export)
빌드 자동화 구현 – 3. Xcode build 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- exportProvisioningProfile: ipa 추출 시 사용할 프로비저닝 이름 입력 
pbxproj에서 설정했던 것과 달리 Provisioning Profile의 이름을 입력! 
Ex) UUID: xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx 
Code Sign: iPhone Distribution: Hello, Inc. 
Provisioning Profile: Enterprise (xcode 빌드 세팅에서 선택했을 때의 이름) 
Chapter 2 
3. Xcode build (ipa export)
빌드 자동화 구현 – 3. Xcode build 
 Command line 
xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} 
-exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 
- exportProvisioningProfile: ipa 추출 시 사용할 프로비저닝 이름 입력 
pbxproj에서 설정했던 것과 달리 Provisioning Profile의 이름을 입력! 
Ex) UUID: xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx 
Code Sign: iPhone Distribution: Hello, Inc. 
Provisioning Profile: Enterprise (xcode 빌드 세팅에서 선택했을 때의 이름) 
Chapter 2 
3. Xcode build (ipa export)
Chapter 2 
빌드 자동화 구현 – Rakefile 예시 
Rakefile
Chapter 3 
빌드 자동화를 공유 하며 
인턴 기간 동안 약 4개월에 걸쳐 수동으로 빌드 했습니다. 서브미션 용과 테스트 
용 빌드 등 3번의 빌드를 해야 했습니다. 기본 1시간 30분의 시간이 걸렸고, 어쩌다 
빌드가 잘못되면 처음부터 다시 해야 하여 어떤 날은 하루 종일 빌드하거나, 야근 
까지 해가며 빌드를 하는 경우도 있었습니다. 
그러던 중 선임 개발자 분이 빌드 자동화를 하는 것이 어떻겠냐는 제안을 하셨고, 
더 이상 이 상황을 지속시키는 것은 아니다 싶어 직접 해보겠다고 지원했습니다. 
인터넷 검색도 해보고, 혼자 머리를 쥐어짜 보기도 하며, 힘들 때는 선임 개발자께 
물어 빌드 자동화를 완성할 수 있었습니다. 이 과정에서 가장 힘들었던 것이 매뉴 
얼의 부재였습니다. 여기저기 단편화된 정보는 많은데, 일련의 과정으로 명확하게 
정리된 자료는 부족했기 때문입니다. 
빌드 자동화를 완성하고 저처럼 수동 빌드로 고생한 분이나, 빌드 자동화 자료 조 
사로 고생하고 계신 분들의 부담들 조금이나마 덜어드리고자, 이렇게 ppt로 매뉴얼 
을 만들었습니다. 부족한 점이 많지만, 조금이나마 도움이 되길 바랍니다. 
참고 Github) https://github.com/gsk120/UnityAutoBuild_iOS
THANK YOU 
ppt 출처 
http://insahara.tistory.com

Contenu connexe

Tendances

Pengertian/Konsep/Term Logika
Pengertian/Konsep/Term LogikaPengertian/Konsep/Term Logika
Pengertian/Konsep/Term LogikaSiti Hardiyanti
 
Lesson 1.0 Activity: Big History Website Scavenger Hunt
Lesson 1.0 Activity: Big History Website Scavenger HuntLesson 1.0 Activity: Big History Website Scavenger Hunt
Lesson 1.0 Activity: Big History Website Scavenger HuntBig History Project
 
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.ppt
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.pptPENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.ppt
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.pptPranowoWowok
 
Nationalist Movements
Nationalist MovementsNationalist Movements
Nationalist MovementsJames_Goosey
 
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptx
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptxPOLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptx
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptxIndraWulan3
 
Bengal partition 1905
Bengal partition 1905Bengal partition 1905
Bengal partition 1905ShaheerAbbasi
 

Tendances (7)

Pengertian/Konsep/Term Logika
Pengertian/Konsep/Term LogikaPengertian/Konsep/Term Logika
Pengertian/Konsep/Term Logika
 
Uji kompetensi kimia X sma
Uji kompetensi kimia X smaUji kompetensi kimia X sma
Uji kompetensi kimia X sma
 
Lesson 1.0 Activity: Big History Website Scavenger Hunt
Lesson 1.0 Activity: Big History Website Scavenger HuntLesson 1.0 Activity: Big History Website Scavenger Hunt
Lesson 1.0 Activity: Big History Website Scavenger Hunt
 
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.ppt
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.pptPENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.ppt
PENGEMBANGAN PUSAT-PUSAT EKONOMI UNTUK KESEJAHTERAAN MASYARAKAT.ppt
 
Nationalist Movements
Nationalist MovementsNationalist Movements
Nationalist Movements
 
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptx
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptxPOLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptx
POLITIK LUAR NEGERI INDONESIA PADA MASA DEMOKRASI TERPIMPIN.pptx
 
Bengal partition 1905
Bengal partition 1905Bengal partition 1905
Bengal partition 1905
 

En vedette

송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)MinGeun Park
 
Optimizing unity games (Google IO 2014)
Optimizing unity games (Google IO 2014)Optimizing unity games (Google IO 2014)
Optimizing unity games (Google IO 2014)Alexander Dolbilov
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
 
Oit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsOit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsHolger Gruen
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swiftNAVER D2
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드Devgear
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptCheolhee Han
 
Unity Heatmap/Game Performance/Collaborate 紹介
Unity Heatmap/Game Performance/Collaborate 紹介Unity Heatmap/Game Performance/Collaborate 紹介
Unity Heatmap/Game Performance/Collaborate 紹介Makoto Ito
 
Unity Analyticsの使い方
Unity Analyticsの使い方Unity Analyticsの使い方
Unity Analyticsの使い方Makoto Ito
 
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁Soojin Ro
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅JP Jung
 
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Benjamin Oh
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발흥배 최
 
안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부mosaicnet
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신현욱 김
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Park JoongSoo
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 

En vedette (20)

송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 
Optimizing unity games (Google IO 2014)
Optimizing unity games (Google IO 2014)Optimizing unity games (Google IO 2014)
Optimizing unity games (Google IO 2014)
 
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...
 
Oit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked ListsOit And Indirect Illumination Using Dx11 Linked Lists
Oit And Indirect Illumination Using Dx11 Linked Lists
 
[Osxdev]4.swift
[Osxdev]4.swift[Osxdev]4.swift
[Osxdev]4.swift
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
 
iOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScriptiOS App 개발 with React Native + ClojureScript
iOS App 개발 with React Native + ClojureScript
 
Unity Heatmap/Game Performance/Collaborate 紹介
Unity Heatmap/Game Performance/Collaborate 紹介Unity Heatmap/Game Performance/Collaborate 紹介
Unity Heatmap/Game Performance/Collaborate 紹介
 
Unity Analyticsの使い方
Unity Analyticsの使い方Unity Analyticsの使い方
Unity Analyticsの使い方
 
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁
0.5년차 iOS개발자의 첫 앱스토어 도전기 + 팁
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
Incognito 2015 - 게임 리소스 추출과 변조 - 오효근
 
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
KGC2015_C# 스크립트를 사용한 게임서버 모니터링 시스템개발
 
안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부안드로이드 어플 개발 전략 10가지 2부
안드로이드 어플 개발 전략 10가지 2부
 
유니티3D 그리고 웹통신
유니티3D 그리고 웹통신유니티3D 그리고 웹통신
유니티3D 그리고 웹통신
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
Jenkins와 Gitlab으로 쉽고 빠르게 구축하는 협업시스템
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 

Similaire à Unity Auto Build iOS

postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfLee Dong Wook
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012Chanho Song
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual StudioHeecheol Yang
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초Sangon Lee
 
안드로이드Jni 사용설치
안드로이드Jni 사용설치안드로이드Jni 사용설치
안드로이드Jni 사용설치Byungsun Lee
 
게임개발 Cocos2d-x : 소프트웨어씽킹연구소
게임개발 Cocos2d-x : 소프트웨어씽킹연구소게임개발 Cocos2d-x : 소프트웨어씽킹연구소
게임개발 Cocos2d-x : 소프트웨어씽킹연구소SWTHINKING LAB
 
게임개발 Cocos2d-x 소프트웨어씽킹연구소
게임개발 Cocos2d-x 소프트웨어씽킹연구소게임개발 Cocos2d-x 소프트웨어씽킹연구소
게임개발 Cocos2d-x 소프트웨어씽킹연구소swthinking
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for AndroidSangkyoon Nam
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdfssuserb942d2
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android 종국 임
 
Windows에서 go+eclipse 개발환경 구축
Windows에서 go+eclipse 개발환경 구축Windows에서 go+eclipse 개발환경 구축
Windows에서 go+eclipse 개발환경 구축Jaehoon Kim
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfLee Dong Wook
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guideJUNHEEKIM27
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Leonardo YongUk Kim
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정leejungwang
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기DongHwan Yu
 

Similaire à Unity Auto Build iOS (20)

postgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdfpostgres_빌드_및_디버깅.pdf
postgres_빌드_및_디버깅.pdf
 
Html5+js with game engine cocos2d-html5 분석 @KGC2012
Html5+js with game engine   cocos2d-html5 분석 @KGC2012Html5+js with game engine   cocos2d-html5 분석 @KGC2012
Html5+js with game engine cocos2d-html5 분석 @KGC2012
 
Linux in Visual Studio
Linux in Visual StudioLinux in Visual Studio
Linux in Visual Studio
 
17. cocos2d 기초
17. cocos2d  기초17. cocos2d  기초
17. cocos2d 기초
 
안드로이드Jni 사용설치
안드로이드Jni 사용설치안드로이드Jni 사용설치
안드로이드Jni 사용설치
 
게임개발 Cocos2d-x : 소프트웨어씽킹연구소
게임개발 Cocos2d-x : 소프트웨어씽킹연구소게임개발 Cocos2d-x : 소프트웨어씽킹연구소
게임개발 Cocos2d-x : 소프트웨어씽킹연구소
 
게임개발 Cocos2d-x 소프트웨어씽킹연구소
게임개발 Cocos2d-x 소프트웨어씽킹연구소게임개발 Cocos2d-x 소프트웨어씽킹연구소
게임개발 Cocos2d-x 소프트웨어씽킹연구소
 
Internship backend
Internship backendInternship backend
Internship backend
 
Spring boot DI
Spring boot DISpring boot DI
Spring boot DI
 
Coded ui가이드
Coded ui가이드Coded ui가이드
Coded ui가이드
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
Jenkins with Unity3d & Android
Jenkins with Unity3d & Android Jenkins with Unity3d & Android
Jenkins with Unity3d & Android
 
Windows에서 go+eclipse 개발환경 구축
Windows에서 go+eclipse 개발환경 구축Windows에서 go+eclipse 개발환경 구축
Windows에서 go+eclipse 개발환경 구축
 
POSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdfPOSTGRES_사칙연산_익스텐션만들기.pdf
POSTGRES_사칙연산_익스텐션만들기.pdf
 
ifcpp build guide
ifcpp build guideifcpp build guide
ifcpp build guide
 
Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래Kotlin 2.0을 통해 알아보는 코틀린의 미래
Kotlin 2.0을 통해 알아보는 코틀린의 미래
 
Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정Vue 뽀개기 1장 환경설정 및 spa설정
Vue 뽀개기 1장 환경설정 및 spa설정
 
안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기안드로이드를 위한 Gradle 맛들이기
안드로이드를 위한 Gradle 맛들이기
 

Unity Auto Build iOS

  • 1. iOS 빌드 자동화 수동 빌드는 그만 • 이름 : 이기석 • 작성일자 : 2014. 11. 18. • 이메일 : gsk123120@gmail.com • Github: https://github.com/gsk120/UnityAutoBuild_iOS
  • 2. INDEX 1. 빌드 자동화 필요성 2. 구현 방법 3. 느낀점
  • 3. Chapter 1 빌드 자동화 필요성 자동화 이전 - 반복되는 세팅 - 긴 시간의 빌드 타임 - 인간의 실수 자동화 이후 - 명령어 한 줄 - 개발자는 개발만 - 릴리즈 버전관리 무엇 보다도 사람이 편해야 한다!
  • 4. Chapter 1 빌드 자동화 필요성 목표 단 하나의 명령어로 원하는 세팅의 빌드가 나오는 것!
  • 5. Chapter 2 빌드 자동화 구현 개발 환경 Xcode 5.1.1 Unity 4.2.2f1 Ruby 2.0.0-p247 Mac OSX 10.9.5
  • 6. Chapter 2 빌드 자동화 구현  Unity 3D iOS 빌드 과정 Unity Build • Unity를 빌드하여 Xcode 프로젝트를 생성한다. Xcode Setting • framework, library, app icon, provisioning 등 빌드하기 위한 설정 Xcode Build • Xcode 빌드를 통해 최종적으로 ipa 파일을 추출
  • 7. Chapter 2 빌드 자동화 구현  빌드 목적 = Rakefile 로 build 스크립트를 만들어 rake만으로 ipa를 얻자.  빌드 흐름 Unity(C#) Rakefile BuildPlayer pbxproj plist executeMethod rake Unity xcodebuild (archive) Scheme recreate xcodebuild (export ipa) ipa
  • 8. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit Unity Xcode Project
  • 9. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit #{UNITY} 유니티 실행파일의 전체 경로 • ex) /Applications/Unity/Unity.app/Contents/MacOS/Unity • Rakefile의 상수로 정의해 두고 사용
  • 10. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -batchmode 커맨드라인으로 유니티를 실행 • 명령어로 빌드하기 위한 필수 옵션
  • 11. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -projectPath 빌드할 유니티 프로젝트의 경로 • 유니티 프로젝트의 절대경로를 루트 부터 입력 • ex) /Users/giseok/unity/test_proj
  • 12. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -executeMethod 실행할 빌드 함수 • 빌드를 수행하는 static함수의 이름을 입력한다. (C#으로 이동) • ex) ExecuteMethods.IOSBuild
  • 13. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -quit 함수 실행 후 종료 • 실행할 함수를 완료한 후 유니티를 종료하는 옵션이다.
  • 14. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Info.plist 수정
  • 15. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Unity에서 제공하는 BuildPipelie.BuildPlayer 함 수를 이용하여 빌드! Info.plist 수정
  • 16. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Unity에서 제공하는 BuildPipelie.BuildPlayer 함수를 이용하여 빌드! Info.plist 수정 BuildPipeline.BuildPlayer ( string[] levels, string locationPathName, BuildTarget target, BuildOptions options )
  • 17. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Info.plist 수정 Xcode 빌드에 필요한 framework, Code Signing, 필요한 파일 import
  • 18. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 App 아이콘, URL Type 등 Info.plist 수정 Info.plist 수정
  • 19. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (2가지)  pbxproj 수정 XocdeProjectModifier (ref) https://github.com/gforeman/XcodeProjectModifier  Info.plist 수정 PlistCS (ref) https://github.com/animetrics/PlistCS
  • 20. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일  빌드에 필요한 framework, library, header, file, folder를 적어둔 파일.  유니티 빌드 시 이 파일들을 모두 읽어 Xcode Project를 설정해 준다.  따로 폴더에 projmod파일들을 저장해두고, 빌드 시 projmod파일 전 부를 읽어 자동으로 설정한다.  좀더 상세한 내용은 Github의 XcodeProjectModifier 참고.
  • 21. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 (key value) * group: Xcode 프로젝트 루트에 해당 이름의 그룹 폴더 생성 후 아래서 지정하는 라이브러리, 프레임워크, 파일 등을 저장 * libs: dylib와 같은 추가할 라이브러리 입력 * frameworks: 추가할 framework 입력 => iOS SDK로 부터 해당 프레임워크를 찾음 * headerpaths: 추가할 헤더파일의 경로를 입력 (실제 헤더파일은 files를 이용해 추가 즉, 경로만 설정해줌) * files: 추가할 파일의 리스트를 입력 (코드 및 icon 파일, iOS SDK 외 별도 framework와 .a 파일도 이곳에 추가) * folders: 입력한 경로에 있는 폴더를 추가 => 재귀적으로 하위 폴더 및 파일 모두 추가함 * excludes: 폴더를 추가할 때 추가하지 않아도 되는 파일의 확장자명을 적는 부분
  • 22. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 iOS SDK에서 제공하는 framework 추가 { "frameworks": ["MessageUI.framework","StoreKit.framework","iAd.framework", "CoreData.framework“,"Security.framework","AdSupport.framework"] }
  • 23. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 광고 SDK와 같은 framework 추가 { "files": ["/Users/giseok/framework/Partytrack.framework“, "/Users/giseok/framework/Adbrix.framework"] } => iOS의 framework와는 다르게 files 키워드로 추가한다.
  • 24. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 Header 폴더에 필요 소스파일, 헤더파일 추가 (해당 폴더가 없다면 만듬) { "group": “Header", "headerpaths": ["Editor/iOS/GameCenter/**"], "files": ["Editor/iOS/GameCenter/GameCenterController.h", "Editor/iOS/GameCenter/GameCenterController.mm", "Editor/iOS/GameCenter/GameCenterManager.h", "Editor/iOS/GameCenter/GameCenterManager.m"], }
  • 25. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 Libraries 폴더에 필요 앱 아이콘, .a 등 각종 필요 파일 추가 (해당 폴더가 없다면 만듬) { "group": "Libraries", "files": ["/Users/giseok/resources/Icon-60.png“, "/Users/giseok/resources/Icon-72.png“ "/Users/giseok/resources/libOMGGameBar.a"], }
  • 26. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 리소스 폴더를 통째로 Xcode 프로젝트에 추가 { "folders": ["/Users/giseok/resources/API/“, "/Users/giseok/resources/Function/“ "/Users/giseok/resources/UI/"], “excludes“: ["^.*.meta$","^.*.mdown",“^.*.pdf$"] } - group 키워드를 사용하면 지정한 폴더 내부에 폴더를 추가한다. - excludes는 폴더를 추가할 때 필요 없는 파일을 제외시킨다.
  • 27. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 라이브러리 파일 추가 { "libs": ["libsqlite3.dylib"] }
  • 28. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 { "group": "Services", "libs": ["libsqlite3.dylib"], "frameworks": ["MessageUI.framework","StoreKit.framework"], "headerpaths": ["Editor/iOS/GameCenter/**"], "files": ["/Users/giseok/Documents/Partytrack/Partytrack.framework", “/Users/giseok/Documents/libOMGGameBar.a", "Editor/iOS/GameCenter/GameCenterController.h", "Editor/iOS/GameCenter/GameCenterController.mm"], "folders": ["iOS/Store/","iOS/GoogleAnalytics/"], "excludes": ["^.*.DS_Store$","^.*.meta$", "^.*.mdown^", "^.*.pdf$", "^.*.svn$"] } - 이렇게 한 파일에 모아도 되고 이전 예시처럼 기능별 관리를 해도 상관 없다.
  • 29. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing  iOS 심사용 인증서와 개발 테스트용 인증서는 별개로 존재한다.  심사용 빌드는 ipa를 설치하여 실행해 볼 수가 없기에 빌드 자동화 시 개발용 빌드도 함께 빌드 해야한다.  overwriteBuildSetting 함수를 사용하여 빌드 타입에 맞는 프로비저닝 을 설정해 줄 수 있다.
  • 30. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing – overwriteBuildSetting 함수  overwriteBuildSetting( // 함수 형태 string settingName, string newValue, string buildConfigName = “all” ) - settingName에 해당하는 설정을 newValue 값으로 변경 - buildConfigName으로 Release, Debug 개별 설정
  • 31. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing – overwriteBuildSetting 함수  overwriteBuildSetting( // 함수 형태 string settingName, string newValue, string buildConfigName = “all” )  settingName => 설정해야하는 Code Sign => CODE_SIGN_NAME_IDENTITY[sdk=iphoneos*] CODE_SIGN_IDENTITY PROVISIONING_PROFILE
  • 32. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing – overwriteBuildSetting 함수  overwriteBuildSetting( // 함수 형태 string settingName, string newValue, string buildConfigName = “all” )  newValue => 변경할 값 => CODE_SIGN과 관련된 설정은 인증서 이름으로 설정. => PROVISIONING_PROFILE은 프로비저닝의 UUID로 설정.
  • 33. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing – overwriteBuildSetting 함수  overwriteBuildSetting( // 함수 형태 string settingName, string newValue, string buildConfigName = “all” )  newValue => 프로비저닝의 UUID는 프로비저닝 마다 고유. => 프로비저닝 등록 후 ~/Library/MobileDevice/Provisioning Profiles/ 위 디렉토리에서 확인 가능.
  • 34. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing – overwriteBuildSetting 함수  overwriteBuildSetting( // 함수 형태 string settingName, string newValue, string buildConfigName = “all” )  buildConfigName => 해당 Code Sign을 적용할 빌드 타입. => Release | Debug | all
  • 35. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  실제 사용 예시
  • 36. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  빌드하고자 하는 설정에 맞게 Info.plist를 수정.  App icon naming을 설정하여 projmod 파일로 추가한 앱 아이콘이 자동 으로 등록 되도록 할 수 있다.  URL Type을 설정할 수 있다.  Github의 PlistCS를 사용하여 간편하게 수정.
  • 37. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  기존 Info.plist 읽기 var plist = (Dictionary<string, object>)Plist.readPlist(plistPath); => Unity 빌드로 생성된 Info.plist의 경로를 통해 내용을 읽어온다.
  • 38. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  Info.plist 변경 (데이터 추가) plist[“keyValue"] = new List<object>{ new Dictionary<string, object> { …… } }; => 추가하고 싶은 KeyValue를 이용하여 값을 새로 추가한다. => plist 의 <dic>은 Dictionary 타입<array>는 List 타입으로 관리.
  • 39. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  Info.plist 변경 (데이터 수정) var CFBundleIconFiles = (List<object>)plist["CFBundleIconFiles"]; CFBundleIconFiles.Add(PlistValue.APP_ICON_76); CFBundleIconFiles.Add(PlistValue.APP_ICON_120); CFBundleIconFiles.Add(PlistValue.APP_ICON_152); => 기존 속성을 변경할 때는 먼저 해당 데이터를 받아온 후 변경한다.
  • 40. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  Info.plist 변경 사항 저장 Plist.writeXml(plist, plistPath); => writeXml 함수를 이용하여 변경된 내용(plist)을 기존 경로(plistPath) 에 저장한다.
  • 41. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  실제 사용 예시
  • 42. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build  Command line을 이용하여 빌드  빌드의 2 Step - Xcode archive 생성 - ipa 실행 파일 추출 => 둘다 xcodebuild 명령어를 사용하여 수행.
  • 43. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (xcarchive)  Command line xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} Apple Submit / ipa 파일 추출을 위해 Xcode를 빌드하여 xcarchive를 생성
  • 44. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (xcarchive)  Command line xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} - project: 빌드할 xcode 프로젝트의 경로를 적어주는 옵션
  • 45. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (xcarchive)  Command line xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} - scheme: 빌드할 프로젝트 scheme 이름을 적어주는 옵션  unity build 후 scheme이 생성되기 전에 아카이브 빌드를 진행하여 에러가 발생하는 경우 존재  이 경우 강제로 scheme을 생성해 줘야함 prj = Xcodeproj::Project.open("#{XCODEPRJ_FPATH}") prj.recreate_user_schemes() prj.save()  Rakefile에 require ‘xcodeproj’를 추가해야함. (xcodeproj을 못찾는경우 sudo gem install xcodeproj를 통해 설치)  ref: http://stackoverflow.com/a/20941812
  • 46. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (xcarchive)  Command line xcodebuild -project #{XCODEPRJ_FPATH} -scheme Unity-iPhone archive -archivePath #{ARCHIVE_FPATH} - archivePath: 생성한 xcarchive 파일을 저장할 위치를 적어주는 옵션 => organizer 메뉴를 사용하기 위해 웬만하면 기존 xcode xcarchive의 디폴트 위치를 적어주자.
  • 47. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (ipa export)  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} 생성한 xcarchive로 부터 ipa 파일을 추출하는 명령어
  • 48. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (ipa export)  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - exportArchive: 아카이브를 추출하겠다는 옵션
  • 49. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (ipa export)  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - archivePath: 추출하려는 아카이브의 경로를 입력하는 옵션 - 이전 xcodebuild로 빌드했던 xcarchive의 경로를 넣어주면 된다.
  • 50. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build (ipa export)  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - exportPath: 추출 결과인 ipa를 저장할 경로를 입력하는 옵션
  • 51. 빌드 자동화 구현 – 3. Xcode build  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - exportFormat: 추출 결과의 format을 선택하는 옵션 ipa를 추출하기위해 ipa를 입력 Chapter 2 3. Xcode build (ipa export)
  • 52. 빌드 자동화 구현 – 3. Xcode build  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - exportProvisioningProfile: ipa 추출 시 사용할 프로비저닝 이름 입력 pbxproj에서 설정했던 것과 달리 Provisioning Profile의 이름을 입력! Ex) UUID: xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx Code Sign: iPhone Distribution: Hello, Inc. Provisioning Profile: Enterprise (xcode 빌드 세팅에서 선택했을 때의 이름) Chapter 2 3. Xcode build (ipa export)
  • 53. 빌드 자동화 구현 – 3. Xcode build  Command line xcodebuild -exportArchive -archivePath #{ARCHIVE_FPATH} -exportPath #{IPA_FPATH} -exportFormat ipa -exportProvisioningProfile #{PROVISIONING_NAME} - exportProvisioningProfile: ipa 추출 시 사용할 프로비저닝 이름 입력 pbxproj에서 설정했던 것과 달리 Provisioning Profile의 이름을 입력! Ex) UUID: xxxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxxx Code Sign: iPhone Distribution: Hello, Inc. Provisioning Profile: Enterprise (xcode 빌드 세팅에서 선택했을 때의 이름) Chapter 2 3. Xcode build (ipa export)
  • 54. Chapter 2 빌드 자동화 구현 – Rakefile 예시 Rakefile
  • 55. Chapter 3 빌드 자동화를 공유 하며 인턴 기간 동안 약 4개월에 걸쳐 수동으로 빌드 했습니다. 서브미션 용과 테스트 용 빌드 등 3번의 빌드를 해야 했습니다. 기본 1시간 30분의 시간이 걸렸고, 어쩌다 빌드가 잘못되면 처음부터 다시 해야 하여 어떤 날은 하루 종일 빌드하거나, 야근 까지 해가며 빌드를 하는 경우도 있었습니다. 그러던 중 선임 개발자 분이 빌드 자동화를 하는 것이 어떻겠냐는 제안을 하셨고, 더 이상 이 상황을 지속시키는 것은 아니다 싶어 직접 해보겠다고 지원했습니다. 인터넷 검색도 해보고, 혼자 머리를 쥐어짜 보기도 하며, 힘들 때는 선임 개발자께 물어 빌드 자동화를 완성할 수 있었습니다. 이 과정에서 가장 힘들었던 것이 매뉴 얼의 부재였습니다. 여기저기 단편화된 정보는 많은데, 일련의 과정으로 명확하게 정리된 자료는 부족했기 때문입니다. 빌드 자동화를 완성하고 저처럼 수동 빌드로 고생한 분이나, 빌드 자동화 자료 조 사로 고생하고 계신 분들의 부담들 조금이나마 덜어드리고자, 이렇게 ppt로 매뉴얼 을 만들었습니다. 부족한 점이 많지만, 조금이나마 도움이 되길 바랍니다. 참고 Github) https://github.com/gsk120/UnityAutoBuild_iOS
  • 56. THANK YOU ppt 출처 http://insahara.tistory.com