Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unity Auto Build iOS

10,280 views

Published on

GitHub: https://github.com/gsk120/UnityAutoBuild_iOS

유니티 빌드 자동화에 대한 설명을 다룬 ppt 입니다.


빌드 자동화에대해 고민이 많으신 분들을 위해 조금이나마 도움이 되고자 이렇게 자료를 공유합니다.

루비 Rakefile을 이용하여 Unity build -> Xcode 수정 -> Xcode build -> ipa 추출까지 한번에 진행하는 과정을 설명하였습니다.

Xcode 빌드가 안드로이드에 비해 상당히 느리기 때문에 수동으로 빌드하는 경우 신경써야 하는 일이 상당히 많습니다. 이 시간을 절약하여 개발에 좀더 투자할 수 있다면 개발자는 더욱 높은 퀄리티의 프로그램을 구현할 수 있을 것입니다. 하지만 빌드 자동화에 대한 정보가 많이 부족하고, 매뉴얼 형식의 자료가 별로 없어 구축하는데 꾀나 많은 조사와 분석이 필요합니다.

수동으로 빌드하며 고생하시는 분이나, 자동화 구축을 위해 고생하시는 분들께 같은 고민을 한 입장으로써, 부족하지만 도움이 되고자 이렇게 빌드 자동화 ppt를 공유합니다.

Published in: Mobile
  • Be the first to comment

Unity Auto Build iOS

  1. 1. iOS 빌드 자동화 수동 빌드는 그만 • 이름 : 이기석 • 작성일자 : 2014. 11. 18. • 이메일 : gsk123120@gmail.com • Github: https://github.com/gsk120/UnityAutoBuild_iOS
  2. 2. INDEX 1. 빌드 자동화 필요성 2. 구현 방법 3. 느낀점
  3. 3. Chapter 1 빌드 자동화 필요성 자동화 이전 - 반복되는 세팅 - 긴 시간의 빌드 타임 - 인간의 실수 자동화 이후 - 명령어 한 줄 - 개발자는 개발만 - 릴리즈 버전관리 무엇 보다도 사람이 편해야 한다!
  4. 4. Chapter 1 빌드 자동화 필요성 목표 단 하나의 명령어로 원하는 세팅의 빌드가 나오는 것!
  5. 5. Chapter 2 빌드 자동화 구현 개발 환경 Xcode 5.1.1 Unity 4.2.2f1 Ruby 2.0.0-p247 Mac OSX 10.9.5
  6. 6. Chapter 2 빌드 자동화 구현  Unity 3D iOS 빌드 과정 Unity Build • Unity를 빌드하여 Xcode 프로젝트를 생성한다. Xcode Setting • framework, library, app icon, provisioning 등 빌드하기 위한 설정 Xcode Build • Xcode 빌드를 통해 최종적으로 ipa 파일을 추출
  7. 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. 8. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit Unity Xcode Project
  9. 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. 10. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -batchmode 커맨드라인으로 유니티를 실행 • 명령어로 빌드하기 위한 필수 옵션
  11. 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. 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. 13. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build #{UNITY} -batchmode -projectPath #{PROJECT_DIR} -executeMethod #{BUILD_METHOD} –quit -quit 함수 실행 후 종료 • 실행할 함수를 완료한 후 유니티를 종료하는 옵션이다.
  14. 14. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Info.plist 수정
  15. 15. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Unity에서 제공하는 BuildPipelie.BuildPlayer 함 수를 이용하여 빌드! Info.plist 수정
  16. 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. 17. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 Info.plist 수정 Xcode 빌드에 필요한 framework, Code Signing, 필요한 파일 import
  18. 18. Chapter 2 빌드 자동화 구현 – 1. unity build 1. Unity Build - excuteMethod Xcode 생성 ExecuteMethods Pbxproj 수정 App 아이콘, URL Type 등 Info.plist 수정 Info.plist 수정
  19. 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. 20. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일  빌드에 필요한 framework, library, header, file, folder를 적어둔 파일.  유니티 빌드 시 이 파일들을 모두 읽어 Xcode Project를 설정해 준다.  따로 폴더에 projmod파일들을 저장해두고, 빌드 시 projmod파일 전 부를 읽어 자동으로 설정한다.  좀더 상세한 내용은 Github의 XcodeProjectModifier 참고.
  21. 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. 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. 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. 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. 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. 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. 27. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  projmod 파일 – 작성 예시 라이브러리 파일 추가 { "libs": ["libsqlite3.dylib"] }
  28. 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. 29. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  Code Signing  iOS 심사용 인증서와 개발 테스트용 인증서는 별개로 존재한다.  심사용 빌드는 ipa를 설치하여 실행해 볼 수가 없기에 빌드 자동화 시 개발용 빌드도 함께 빌드 해야한다.  overwriteBuildSetting 함수를 사용하여 빌드 타입에 맞는 프로비저닝 을 설정해 줄 수 있다.
  30. 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. 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. 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. 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. 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. 35. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (pbxproj)  실제 사용 예시
  36. 36. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  빌드하고자 하는 설정에 맞게 Info.plist를 수정.  App icon naming을 설정하여 projmod 파일로 추가한 앱 아이콘이 자동 으로 등록 되도록 할 수 있다.  URL Type을 설정할 수 있다.  Github의 PlistCS를 사용하여 간편하게 수정.
  37. 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. 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. 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. 40. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  Info.plist 변경 사항 저장 Plist.writeXml(plist, plistPath); => writeXml 함수를 이용하여 변경된 내용(plist)을 기존 경로(plistPath) 에 저장한다.
  41. 41. Chapter 2 빌드 자동화 구현 – 2. Xcode Setting 2. Xcode Setting (Info.plist)  실제 사용 예시
  42. 42. Chapter 2 빌드 자동화 구현 – 3. Xcode build 3. Xcode build  Command line을 이용하여 빌드  빌드의 2 Step - Xcode archive 생성 - ipa 실행 파일 추출 => 둘다 xcodebuild 명령어를 사용하여 수행.
  43. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 54. Chapter 2 빌드 자동화 구현 – Rakefile 예시 Rakefile
  55. 55. Chapter 3 빌드 자동화를 공유 하며 인턴 기간 동안 약 4개월에 걸쳐 수동으로 빌드 했습니다. 서브미션 용과 테스트 용 빌드 등 3번의 빌드를 해야 했습니다. 기본 1시간 30분의 시간이 걸렸고, 어쩌다 빌드가 잘못되면 처음부터 다시 해야 하여 어떤 날은 하루 종일 빌드하거나, 야근 까지 해가며 빌드를 하는 경우도 있었습니다. 그러던 중 선임 개발자 분이 빌드 자동화를 하는 것이 어떻겠냐는 제안을 하셨고, 더 이상 이 상황을 지속시키는 것은 아니다 싶어 직접 해보겠다고 지원했습니다. 인터넷 검색도 해보고, 혼자 머리를 쥐어짜 보기도 하며, 힘들 때는 선임 개발자께 물어 빌드 자동화를 완성할 수 있었습니다. 이 과정에서 가장 힘들었던 것이 매뉴 얼의 부재였습니다. 여기저기 단편화된 정보는 많은데, 일련의 과정으로 명확하게 정리된 자료는 부족했기 때문입니다. 빌드 자동화를 완성하고 저처럼 수동 빌드로 고생한 분이나, 빌드 자동화 자료 조 사로 고생하고 계신 분들의 부담들 조금이나마 덜어드리고자, 이렇게 ppt로 매뉴얼 을 만들었습니다. 부족한 점이 많지만, 조금이나마 도움이 되길 바랍니다. 참고 Github) https://github.com/gsk120/UnityAutoBuild_iOS
  56. 56. THANK YOU ppt 출처 http://insahara.tistory.com

×