착한 포커의 영문 버전, Succubus Poker를 iOS 용으로 포팅하고 심사중입니다.
4월부터 5월 중순까지 iOS 버전 포팅 작업을 끝냈습니다. 5월 말에 AppStore에 제출하고 심사 과정에 있었는데...
심사 통과하고 앱 마켓에 올라가면 개발 과정을 적어야지했던게 너무 늦어졌네요.
심사 과정에서 3차례 reject 당하고 4번 수정본을 제출한 상태입니다. 앞으로도 한참 걸릴 것 같습니다. ㅠㅠ
#1 안드로이드 빌드 성공 → iOS 빌드 난이도는?
안드로이드 빌드가 성공했다면 iOS 빌드는 그냥 바로 됩니다.
유니티의 가장 큰 장점이죠.
#2 안드로이드 소스에서 수정해야 할 것들?
그냥 바로 되긴 하는데... 안드로이드에서 잘 되던 기능이 아이폰에 와서 안되는 경우가 없진 않더군요.
A. [Serializable]
게임에서 저장해야 할 데이터를 클래스로 묶어서 PlayerPrefs에 저장하고 있습니다.
안드로이드에서 save/load 잘 되던 것이 iOS 오면서 런타임 오류나고 게임이 멈추더군요.
구글 검색 결과 알아낸 해결책은 - 해당 데이터 클래스 선언 위에 [Serializable] 을 넣어주면 된다 - 였습니다.
---------------------------------------------
[Serializable]
public class NpcData
{
public int playingStage; // -1(lock) / 0, 1, 2, 3, 4 / 5(final)
public float hp;
public int payedEnergyForStage2;
public int payedEnergyForStage3;
public int payedEnergyForStage4;
}
---------------------------------------------
B. Shader
PC(유니티 에디터)에서 잘 나오던 스프라이트가 스마트폰에 올리면 이미지가 깨져보이는 경우가 있더군요.
iOS에 올릴 때에도 발생했구요, 예전 안드로이드에 올릴 때에도 발생했었습니다.
이럴땐 해당 스프라이트의 Shader를 바꿔주면 해결되었습니다.
#3 Player Setting
iOS로 switch platform 한 뒤 Player Setting 화면을 실행하고 아래 내용으로 설정합니다.
A. s!criping Backend : IL2CPP
B. Architecture : Universal
C. Target iOS Version : 6.0 (이상)
올해부터 애플 앱스토어에서는 64비트 지원 앱만 허용하도록 정책이 바뀌었습니다.
이를 위해 A, B 세팅을 해야 합니다.
그리고 차후에 별도 글로 작성할 인앱결제를 위해 C 설정도 추가로 필요합니다.
#4-1 XCode
모든 준비가 끝난 뒤, 유니티에서 [Build and run]을 실행하면?
안드로이드처럼 설치 파일인 apk가 빌드되고 바로 USB로 연결된 스마트폰에 설치/실행되지 않더군요.
[Build and run]을 실행하면 폴더명을 입력받고, 그 폴더에 XCode용 풀소스가 만들어집니다.
자동으로 XCode가 실행되면서 프로젝트가 열려야 하는데... 제 맥북에서는 프로젝트가 자동으로 안열리네요.
XCode를 실행하고 위에서 만들어진 폴더를 선택하면 XCode 프로젝트가 열립니다.
#4-2 XCode 세팅
특별한 이슈가 없다면 바로 빌드해도 됩니다.
Succubus Poker에서는 아래 기능들 때문에 추가 세팅이 필요합니다.
A. GameAnalytics
실시간 게임 지표 매트릭스 서비스입니다. (GoogleAnalytics와 유사)
유니티 플러그인으로 지원되지만 맥에서 빌드하면 Build phase > Link binary with Libraries에 아래 내용을 추가해야 합니다.
AdSupport.framework
SystemConfiguration.framework
libsqlite3.dylib
libz.dylib
(x) libGameAnalytics.a (플러그인 소스에 포함되어 있었음)
(참고로 최신 GameAnalytics 플러그인을 Unity 5에서 사용하면 위 추가 세팅이 필요 없는것 같더군요)
추가하지 않은 상태로 빌드하면 실행직후 런타임 에러납니다.
B. 인앱결제
마찬가지로 Build phase > Link binary with Libraries에 아래 내용을 추가해야 합니다.
StoreKit.framework
이건 추가하지 않아도 실행은 되는데... 인앱결제 실행이 안되더군요.
#5 앱스토어용 빌드
안드로이드 빌드는 많이 해봐서 APK 파일 빌드 및 keystore 적용은 익숙한데요.
XCode, Object-C는 한 번도 공부해 본 적이 없어서 빌드에 두려움을 갖고 있었습니다.
간단히 빌드하고 아이튠즈에 올려서 앱스토어 심의를 받으면 될 경우에는
XCode > Product > Archive 만 실행하면 알아서 다 되었습니다.
부끄러운 얘기인데... 저는 여전히 ipa 파일이 어디 있는지도 모르고 본 적도 없습니다.
그리고 Archive 과정에서 provisioning 등을 확인하는 단계가 있습니다.
XCode 개발자 등록 및 개발 환경 설정에서 처리했으면 쉽게 넘어갈 수 있습니다.
(이 내용은 유니티 빌드 과정이라기보다는 개발자 등록 및 개발 환경 설정 과정이라 생략합니다)
#6 테스트 폰에 빌드
개발중인 맥에 등록된 아이폰(혹은 아이패드)를 연결하면 XCode에서 바로 실행 파일을 올릴 수 있습니다.
화면 좌상단에서 실행할 아이폰을 선택하고 그 왼쪽에 있는 [▶] 버튼만 누르면 되지요.
#7 테스트 플라이트
테스트할 디바이스들을 항상 맥에 연결하고 빌드해서 배포하는건... 가능은 하지만 바람직한 방법은 아니죠.
구글에서는 구글 플러스 그룹을 이용해 테스트 환경을 제공하는데 애플은 테스트 플라이트로 제공합니다.
아이튠즈커넥트 페이지에서
나의 앱 > (실제 내 앱) > 사전 출시 → 실행하면 내부/외부 테스트 페이지가 열립니다.
등록된 앱 버전들 중 테스트할 버전의 TestFlight 베타 테스트 [Off/On]을 체크하면 테스트 설정 화면이 나옵니다.
테스터들에게 보여질 내용과 피드백을 받을 사람에 대한 정보 입력을 합니다.
입력을 완료하고 저장하면 테스트플라이트 베타 테스트를 위한 앱 심의 단계로 넘어갑니다.
(베타 테스트 단계의 앱도 심의한다니... 역시 철두철미한 애플입니다. 감탄)
다행히 마켓 배포용 앱 심의와는 달리, 베타 테스트 단계의 앱 심의는 간단하고 빨리 끝납니다. 저는 다음날 승인이 떨어졌네요.
등록된 앱에 대해서 내부/외부 베타 테스터를 초대하고 진행하면 되고요.
베타 테스터는 디바이스에 "TestFlight" 앱을 설치한 후 초대 이메일을 확인하면 테스트를 진행할 수 있습니다.
설치 및 피드백 모두 TestFlight 앱에서 이루어집니다.
... 개발 소감을 세 줄 요약하자면
1. 안드로이드 빌드를 성공했었다면, iOS 빌드도 쉽게 할 수 있었다.
2. 64비트 빌드 옵션을 설정해야 한다.
3. 빌드(및 마켓 업로드는) 유니티에서 바로 안되고 XCode를 거치게 된다.
prime31이랑 페이스북 붙이는거에서 멘붕중 ㅋㅋ
어찌저찌 됐는데 어 이게 왜!? 랄까요 ㅠㅠ ios나오면 받아서 해보겠습니다!
그나저나 사이트 참 좋은자료들이 많네요 잘 보겠습니다 ㅎㅎ