Monthly Archives: February 2014

Xcode Bots 적용

테스트는 프로젝트에서 빠질수 없는 부분입니다. 테스트를 위해 변경된 앱을 설치해야 합니다. 설치 방법에는 여러가지가 있습니다. 여러가지 방법 중 Hey 프로젝트에서 적용한 방법을 공유하려고 합니다.

Hey?

Hey는 글로벌 버전 소셜데이팅 서비스입니다. 매일 오전 10시 3명의 이성의 프로필을 확인하고 서로 호감이 있으면 채팅을 할 수 있습니다.

Hey_Timeline Hey_Profile Hey_Chat

테스트 버전 배포

앱스토어에 업로드가 아니라 테스트를 위해 사내에 배포할때 어떤 방법을 사용하시나요?
이음에서는 두가지 방법을 이용했습니다.

  1. 디바이스를 연결하고 Xcode에서 직접 실행해서 앱를 설치해준다.
  2. Adhoc을 이용하여 사내 메일로 공유한다.

1번 방법은 작업중에 설치해줘야 할 경우 방해를 받게 됩니다. 그리고 테스트 디바이스로 등록되지 않은 디바이스때문에 Provisioning을 새로 생성해야 하는 문제가 발생합니다. Debug/Release로 빌드했는지 확인해야 합니다.

adhoc adhoc2 adhoc3

2번 방법은 1번 보다 더 효과적입니다. 한번 메일을 공유하면 앱을 설치해주느라 방해받지 않아도 됩니다. 하지만 불편한 배포과정이 남아 있습니다. Archive -> Distribute -> Adhoc 이런 방법으로 Adhoc버전으로 바이너리를 만듭니다. 그리고 생성된 ipa, plist 파일을 미리 입력한 url에 맞게 서버에 업로드합니다. 여기까지가 끝이지만…. 제대로 올렸는지 확인하기 위해 직접 다운로드해봐야 합니다.

두가지 방법 다 만족스럽지 못합니다.

그래서 새로운 기능인 Bots에 관심이 생겨서 직접 적용해 보았습니다.

Bots ?

Xcode BotsXcode5에 새로 추가된 기능입니다. Bots은 Xcode만을 위한 CI입니다. Bots은 간편하게 설정할 수 있습니다. XCTest를 사용할 경우 실제 등록된 디바이스에서 테스트를 실행하고 결과를 리포트해주는 기능도 있습니다.

bot_viewer-summary_2x 지속적인 통합을 위한 Bot

Bots 설치방법

http://meetkei.com/?p=3196

프로젝트 적용

HeyRelease Bot 생성

createHeyReleaseBot1

Hey Scheme 의 Bot을 생성합니다.

createHeyReleaseBot2

일일 빌드를 위해 매일 오후 5시에 빌드되도록 일정을 설정합니다.

createHeyReleaseBot3

빌드 성공시 프로젝트원 모두 메일을 받을 수 있도록 설정합니다.
실패시 개발자들만 메일을 받도록 설정합니다.
Create Bot 클릭하면 바로 통합이 진행됩니다.

HeyReleaseBuildError HeyReleaseBuildSuccess

통합 결과에 맞게 실패, 성공 메일을 받습니다.
디바이스에서 성공 메일을 확인한 후 제품 다운로드를 클릭하면 설치가 진행됩니다.

이제 통합을 매일 하는 일만 남았습니다!

문제 발생

통합메일에서 다운로드받은 앱을 실행해보니 서비스중인 서버(RealServer)로 접속하고 있었습니다. 테스트를 위해서 RealServer와 테스트 서버(TestServer) 모두 테스트가 가능해야 합니다. 이대로면 TestServer에서 테스트하기 위해서는 기존 방법을 이용해야 합니다.

RealServer로 접속하는 이유

Bot은 통합과정에서 Release build를 하게 됩니다. Build Settings 와 Server Host를 결정하는 Macro때문에 HeyRelease는 RealServer로만 접속됩니다.

HeyRelease_preprocessor

Build Settings > Preprocessor Macros 의 설정을 보면 Debug 에서 DEBUG=1 이 존재합니다. Release 에는 DEBUG가 존재하지 않습니다.

Header 에 적용한 Macro입니다. DEBUG가 존재하면 TestServer로 아니면 RealServer로 API_HOST가 정해집니다. 통합 중에는 Release 로 빌드가 되므로 API_HOST는 TestServer가 됩니다.

그럼 테스트 서버로 연결하려면?
Release에서도 DEBUG를 설정하면 됩니다.

그럼 RealServer, TestServer 를 모두 테스트하고 싶으면?
음…..

Hey에 적용한 방법

여러가지 방법을 생각해본 결과 제가 선택한 방법은 Target을 하나 더 생성하는 것입니다. HeyRelease는 RealServer로 HeyDebug는 TestServer로 접속하도록 하였습니다. Bot을  2개 생성해서 필요할때 둘중 하나를 배포합니다.

  1. 현재 Target을 복사해여 새로운 Target을 만듭니다.
  2. Preprocessor Macros 를 설정합니다.
  3. HeyDebug 이름으로 Bot을 생성합니다.

HeyDebug_preprocessor

createHeyDebugBot1 createHeyDebugBot2 createHeyDebugBot3

단점

  • build settings이 변경되면 두개의 Target 에 적용해야 함
  • 파일 생성 및 추가시 두개의 Target 을 지정해야 함

targets

언급한 단점이 있지만 Bots을 빠르게 적용할 수 있는 방법입니다. 개선된 방법은 조금 더 고려해 볼 예정입니다.

Bots Error

처음 Bots을 사용하면 많은 오류들과 만나게 됩니다. 몇가지 오류 해결 방법을 정리하였습니다.

Provisioning Profile 관련 오류

ProvisioningProfileError

iOS Team Provisioning Profile 을 사용하면 문제가 해결됩니다.

GeneralIdentity

그래도 해결되지 않는 경우 Target > General > Identity 에 위와 같이 Provisioning Profile 오류로 인한  Fix Issue버튼이 표시되는 경우가 있습니다. 이 버튼을 클릭하고 수정된 상태에서 통합을 진행해 보세요.

Reason: XCSCredentialSSHKey: private key is missing from the credential

http://stackoverflow.com/questions/5525436/xcode-could-not-find-a-valid-private-certificate-valid-key-pair-for-this-profile

xcode bots User interaction is not allowed.

  • Open the Keychain Access
  • Right click on the private key
  • Select “Get Info”
  • Select “Access Control” tab
  • Click “Allow all applications to access this item”
  • Click “Save Changes”
  • Enter your password

http://stackoverflow.com/questions/577750/running-xcodebuild-from-a-forked-terminal

Bots 오류 모음

  • Repositories that require an SSH key to access
  • Code Signing and Provisioning Profiles
  • Submodules
  • I made a mistake and now I can’t fix the repository from Xcode!

http://ikennd.ac/blog/2013/10/xcode-bots-common-problems-and-workarounds/

Profile