GitHub: https://github.com/gsk120/UnityAutoBuild_iOS
유니티 빌드 자동화에 대한 설명을 다룬 ppt 입니다.
빌드 자동화에대해 고민이 많으신 분들을 위해 조금이나마 도움이 되고자 이렇게 자료를 공유합니다.
루비 Rakefile을 이용하여 Unity build -> Xcode 수정 -> Xcode build -> ipa 추출까지 한번에 진행하는 과정을 설명하였습니다.
Xcode 빌드가 안드로이드에 비해 상당히 느리기 때문에 수동으로 빌드하는 경우 신경써야 하는 일이 상당히 많습니다. 이 시간을 절약하여 개발에 좀더 투자할 수 있다면 개발자는 더욱 높은 퀄리티의 프로그램을 구현할 수 있을 것입니다. 하지만 빌드 자동화에 대한 정보가 많이 부족하고, 매뉴얼 형식의 자료가 별로 없어 구축하는데 꾀나 많은 조사와 분석이 필요합니다.
수동으로 빌드하며 고생하시는 분이나, 자동화 구축을 위해 고생하시는 분들께 같은 고민을 한 입장으로써, 부족하지만 도움이 되고자 이렇게 빌드 자동화 ppt를 공유합니다.
Android 기반의 게임 프로젝트를 오픈하면서 구축한 빌드 시스템을 간
략하게 소개합니다.
osx 기반에서 Jenkins를 이용하여 Unity3D와 Android Native
Code와 설정 방법에 대해 다루고 있습니다.
세부적인 코드보다는 전체적인 흐름에 초점을 맞췄으므로
참고용으로 보시기 바랍니다.
Android 기반의 게임 프로젝트를 오픈하면서 구축한 빌드 시스템을 간
략하게 소개합니다.
osx 기반에서 Jenkins를 이용하여 Unity3D와 Android Native
Code와 설정 방법에 대해 다루고 있습니다.
세부적인 코드보다는 전체적인 흐름에 초점을 맞췄으므로
참고용으로 보시기 바랍니다.
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
My React TechTalk with Jordan open source association on Sep 13-2017 @Zinc , KHBP.
Session source code :
https://github.com/ali-sao/Better-web-apps-with-react-redux-.git
This article contains information about performance optimization of Unity3D games for android. Different solutions provided both for CPU and GPU. Also here you can find methodology which will help you to detect performance problems, analyze them and perform appropriate optimization.
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
도커 무작정 따라하기
- 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커의 기본 개념부터 설치와 사용 방법까지 설명합니다.
더 자세한 내용은 가장 빨리 만나는 도커(Docker)를 참조해주세요~
http://www.pyrasis.com/private/2014/11/30/publish-docker-for-the-really-impatient-book
My React TechTalk with Jordan open source association on Sep 13-2017 @Zinc , KHBP.
Session source code :
https://github.com/ali-sao/Better-web-apps-with-react-redux-.git
This article contains information about performance optimization of Unity3D games for android. Different solutions provided both for CPU and GPU. Also here you can find methodology which will help you to detect performance problems, analyze them and perform appropriate optimization.
그래픽 최적화로 가...가버렷! (부제: 배치! 배칭을 보자!) , Batch! Let's take a look at Batching! -...ozlael ozlael
그래픽 최적화를 위해서 필수로 알아야하는 드로우콜과 배칭을 심화하여 다룹니다. 드로우콜의 개념, Batch와 SetPass Call의 차이, 드로우콜 감소 방법 등등 기초 개념부터 실무적인 깊이까지 다룹니다. 기반지식 여부 상관 없이 모두 들으실 수 있습니다. 특히 아티스트와 프로그래머에게 도움이 될 것입니다.
iOS App 개발 with React Native + ClojureScriptCheolhee Han
ClojureScript 와 React Native 를 이용하여, 사물인터넷 기기와 App의 프로토타입 개발한 결과를 시연합니다.
React Native 를 채택까지의 과정을 전개합니다.
왜 Clojure로 개발하는가? 대한 이야기.
소스 저장소
https://github.com/cheolhee/ReactNativeDuckie
Unity Heatmap/Game Performance/Collaborate 紹介Makoto Ito
Unite 2016 Tokyo で行われたワークショップのスライドです。
以下のサービスを紹介しています。
Unity Heatmap
Unity Game Performance
Unity Collaborate
簡単に綺麗な絵作りをしてくれるツール「One Step Effects」も紹介しています。
<p><font>한동호 안드로이드사이드 운영자</font></p><div><font>01.안드로이드 기능을 적극 활용하라 02.남의 콘텐츠를 활용하는 어플 개발은 자제하라 03.무료/유료 선택을 현명히 하라 04.Web-based를 고려하라 05.지속적으로 활용할 수 있는 어플을 만들어라 06.단일 상점이 아닌 백화점 같은 어플을 만들어라 07.Fun과 Social을 가미하라 08.안드로이드 버전 및 해상도를 고려하라 09.어플 홍보 방법에 대해서 고민하라 10.개발은 혼자가 아닌 여럿이 함께 하라</font></div><div> </div><div><font>2010 공개SW 개발자대회 1차 기술세미나</font></div><div><font>주제: Open Your Mind, Show Your Dream</font></div><div><font>주최: 지식경제부가</font></div><div><font>주관: 정보통신산업진흥원, 한국공개SW협회</font></div>
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트Ji-Woong Choi
Docker를 활용하여 Gitlab CI/CD 설치 구성 및 샘플 테스트를 위한 가이드 문서이며, Docker 및 Gitlab에 대한 개요 및 사용법에 대해서는 다루지 않습니다. Docker image를 이용 Gitlab 및 Gitlab CI/CD 설치 및 구성 후 Sample Spring boot web application을 이용하여 소스 변경에 따른 commit이 발생 했을 때 Gitlab CI/CD 기능을 통해 application 테스트, 빌드, 배포까지의 일련의 과정이 자동으로 진행되는지를 테스트 하는 내용입니다.
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 파일을 추출
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 수정
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 키워드로 추가한다.
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 개별 설정
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를 생성
55. Chapter 3
빌드 자동화를 공유 하며
인턴 기간 동안 약 4개월에 걸쳐 수동으로 빌드 했습니다. 서브미션 용과 테스트
용 빌드 등 3번의 빌드를 해야 했습니다. 기본 1시간 30분의 시간이 걸렸고, 어쩌다
빌드가 잘못되면 처음부터 다시 해야 하여 어떤 날은 하루 종일 빌드하거나, 야근
까지 해가며 빌드를 하는 경우도 있었습니다.
그러던 중 선임 개발자 분이 빌드 자동화를 하는 것이 어떻겠냐는 제안을 하셨고,
더 이상 이 상황을 지속시키는 것은 아니다 싶어 직접 해보겠다고 지원했습니다.
인터넷 검색도 해보고, 혼자 머리를 쥐어짜 보기도 하며, 힘들 때는 선임 개발자께
물어 빌드 자동화를 완성할 수 있었습니다. 이 과정에서 가장 힘들었던 것이 매뉴
얼의 부재였습니다. 여기저기 단편화된 정보는 많은데, 일련의 과정으로 명확하게
정리된 자료는 부족했기 때문입니다.
빌드 자동화를 완성하고 저처럼 수동 빌드로 고생한 분이나, 빌드 자동화 자료 조
사로 고생하고 계신 분들의 부담들 조금이나마 덜어드리고자, 이렇게 ppt로 매뉴얼
을 만들었습니다. 부족한 점이 많지만, 조금이나마 도움이 되길 바랍니다.
참고 Github) https://github.com/gsk120/UnityAutoBuild_iOS