Tech/iOS 개발2013.09.06 20:51

iOS 어플리케이션 배포하기

  (1) TestFlight를 이용한 내부 Release 버젼 배포 및 테스트


본 포스트에서 TestFlight를 이용한 내부 Release 버젼 배포 및 테스트 과정을 소개 한 후, 다음 포스트에서 앱스토어 등록을 위한 방법을 소개할 예정입니다. 이 포스트는 TestFlight에 가입하여 팀을 구성한 상태에서 읽어주시기 바랍니다.

1. TestFlight란?

iOS 개발시 앱스토어에 등록하기 전 여러번의 테스트를 거치게 되는데, 그 때 마다 직접 기기에 연결 후 빌드해서 팀원들과 내부 테스터 분들에게 배포하기란 귀찮은 작업입니다. 또한 빌드시 Debug 모드 일 때와  Release 모드일 때는 다르죠. 그래서 Release 모드로 빌드된 앱을 배포하여 테스트를 할 필요가 있는데, 이 작업을 손쉽게 해주는 것이 바로 TestFlight 입니다.


2. Test Flight 설치하기

먼저 https://testflightapp.com 에 가입하여 Desktop App을 설치해 주세요 


3. Application Target 설정하기

새로운  배포용 앱(Archive)을 생성하는 것이므로 Version 과 Build 번호를 한단계씩 높여 줍니다. Summary -> iOS의 Application Target 에서 아래 그림과 같이 수정하시면 됩니다. Build번호는 같은 Release 버전에서도 몇 번 수정하여 배포할 수 있으니 소수점 뒤에 하나를 더 붙여줍니다. 


4. Archive Build Configuration 설정

다음으로 Archive 를 생성할 때의 Build Configuration 을 설정해 주어야 됩니다. 아래 그림과 같이 Xcode 상단의 Scheme 에서 왼쪽에 앱이름이 적혀있는 부분을 클릭 하신후 Edit Scheme 으로 들어갑니다. 

Archive 탭의 Build  Configuration 항목에서 Release 로 설정이 되어 있는지 확인합니다. (Distribution은 앱스토어 배포용)


5. Archive로 빌드하기

상단 메뉴바에서 Product -> Archive 를 누르시면 Release 모드로 빌드되어 Archive 가 생성됩니다. 

아래와 같이 Organizer 의 Archive 탭에서 정상적으로 생성된 것을 확인 하실 수 있습니다.


6. Test Flight 에 어플리케이션 등록

아까 처음에 Test Flight 앱을 설치하셨으면 상단 메뉴바에 Test Flight 아이콘이 있습니다. 이를 클릭하시면 방금 Archive로 만든 앱목록이 나오는 것을 확인 하실수 있습니다. 이를 클릭하시고 확인 후 쭉 진행하시면 앱이 TestFligt 팀에 등록이 되고, 구성원들에게 메일이 전송됩니다.

2014.07.21 업데이트 : 정상적으로 앱을 등록했는데 설치 실패하는 기기가 발생하는 경우를 만났습니다. TestFlight App 에서 identity를 선택할 때, 해당 App의 App ID와 일치하는 iOS Team Provisioning Profile 을 선택하여 빌드를 등록하니 문제가 해결되었습니다.

그러면 아래와 같은 TestFlight 창이 뜨는데 이 때, 이 창에 있는 Identity와 Build Settings -> Code Signing 에 있는 Release 항목의 Provisioning Profile이 일치하는지 확인해 주세요. 

 


7. 앱 설치하기

iOS 디바이스에 Archive 를 설치하는 방법입니다. 앱을 등록하는 시점에 미리 Device와 함께 Test Fligt 에 등록이 되어있던 사람은 받은 메일의 링크를 따라가면 앱을 설치할 수 있는 링크가 나옵니다. 

새로운 멤버나 장치에서 이 앱을 설치하고 싶으시다면 가지고 있는 Device 에서 "Safari" 를 통해 TestFlight 홈페이지에 접속하신 후 로그인을 합니다. 처음 들어가는 장치라면 로그인 직후 아래와 같은 하면이 나옵니다.

Connect Device 버튼 을 누르시면 Provisioning Profile을 설치하라고 설정 창이 나오는데 설치해주시면 다시 웹 화면으로 돌아와서 "View All Apps" 란 탭이 생깁니다 이 탭을 클릭하시면

이러한 화면이 나오게되고, 여기서 INSTALL 을 하시면 설치가 됩니다

이제 내부테스트를 진행하시면 됩니다!



Posted by 비둘기야

댓글을 달아 주세요

  1. like 버튼이 없어서 아쉽네요..
    앱 이미 설치되어 있으면 업데이트로 설치 되는지 궁금하네요? 그렇겠죠?

    2013.09.06 21:37 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 업데이트로 설치 되더라구요 ㅎㅎ

      2013.09.09 10:12 신고 [ ADDR : EDIT/ DEL ]
    • 요 근래에 Android 도 지원되게 바뀌었는데, 연재로 Android 프로젝트에 대해서 써보는 것도 좋겠군요!

      2013.10.01 21:53 신고 [ ADDR : EDIT/ DEL ]
  2. 김병수

    여쭈어 보고 싶은게 있는데요.
    TestFlight에서 6그림화면에서요 SDK 부분과 dSYM 부분이
    SDK not found 와
    dSYM not found 이 뜨는데 따로 설치 해야 하는 부분인가요?

    2013.09.27 14:23 [ ADDR : EDIT/ DEL : REPLY ]
    • 네 그렇습니다.

      이 포스트에서는 TestFlight SDK 를 사용하도록 이미 설정되어 있는 프로젝트를 배포하는 방법을 설명하고 있어서 SDK 사용하는 부분은 들어가 있지 않은데요, TestFlight 홈페이지에서 안내하고 있는대로 하시면 특별히 문제는 없을 겁니다.

      2013.10.01 21:53 신고 [ ADDR : EDIT/ DEL ]
  3. 정민수

    https://testflightapp.com 에 접속이 되지 않는데, 혹시 접속 잘 되시는지 좀 알 수 있을까요?

    2017.02.09 10:58 [ ADDR : EDIT/ DEL : REPLY ]

Tech/iOS 개발2011.07.21 11:39

Xcode 4는 이전 버전과 UI가 완전히 달라져서 힘드네요 orz

전에 EXC_BAD_ACCESS 를 디버깅하는 방법을 포스팅한 적이 있는데, 달라진 UI에 맞추어 다시 설명해보도록 하지요.

Environment 설정이 이제는 Scheme 쪽으로 통합되었습니다. 좌측 상단에 있는 시뮬레이터로 실행할지 실제 장비에서 실행할지 선택하는 부분이 Scheme 선택 UI 입니다.


여기서 Edit Scheme... 을 고릅니다.


그 후 뜨는 대화창에서 좌측의 Run <앱 이름> 항목을 선택합니다. 그리고 Arguments 탭으로 가서 Environment Variables 섹션에 NSZombieEnabled 를 추가해주면 됩니다. 한 번 추가해놓고 필요할 때에만 체크박스에 체크해서 사용하면 됩니다.


Posted by wafe

댓글을 달아 주세요

Tech/iOS 개발2011.03.12 09:38
EXC_BAD_ACCESS 오류가 나면서 프로그램이 종료되는 현상은 이미 소멸된 개체의 포인터에 메시지를 보낸 것이 원인입니다.

문제는 이렇게 종료되었을 때 코드의 어느 부분에서 그러한 메시지 전달이 시도되었는지 알려주지 않아서 디버깅이 정말 힘들다는거죠.

이럴 때 NSZombie를 사용해야 합니다.

XCode 왼편 목록에서 Executables 중 디버깅하려는 항목의 Get Info로 들어갑니다. 거기서 Arguments에 NSZombieEnabled 를 YES로 성장하는 항목을 추가해줍니다. 그리고 디버깅을 하면 됩니다.

이렇게 설정하면 개체가 소멸된 그자리에 좀비가 남아서 잘못된 메시지 전달 시도라는 것을 알려줍니다.

문제에 대한 디버깅을 마치면 위에서 추가한 NSZombieEnabled Argument를 지우거나 체크 해제해줍니다.

iPhone 에서 작성된 글입니다.
Posted by wafe

댓글을 달아 주세요

Tech/iOS 개발2011.01.18 18:39

XCode의 디버거에서는 변수의 retain count를 볼 수가 없어서 불편한데요, 디버깅 중에 볼 수 있는 방법이 없지는 않습니다. gdb의 디버깅 콘솔을 띄워서 다음과 같이 입력하면 theObj의 retain count 가 출력됩니다.

print (unsigned int)[theObj retainCount]


참고로, 재미삼아 위의 문장에서 (unsigned int) 부분을 지우고 실행해보면 '리턴 타입 정보가 없어서 "objc_msgSend" 함수를 호출할 수 없다'는 오류 메시지가 표시됩니다. Objective-C 에서 메시지 표현식이 내부적으로 어떻게 구현되는지 엿볼 수 있는 부분이겠네요. ^^

Posted by wafe

댓글을 달아 주세요

Tech/iOS 개발2011.01.18 16:03


오랜만에 글을 쓰네요. 연말 중에는 정신 없어서 방치했던 개발부 블로그님...

요즘 Xcode를 뚝딱거리느라 -_-; iOS에서 svn을 사용하는 방법을 wafe 과장님께서 알려주셨습니다.
iOS에서 Tortoise SVN처럼 폴더 메뉴를 이용하여 svn에서 업데이트하고, 커밋할 수 있는 놈이 있더군요.
바로 SCPlugin인인데요.

설치 방법과 사용법은 굉장히 간단합니다.

SCPlugin 사이트에서 Download 탭을 누르신 뒤, 가장 최신 설치 파일을 다운로드 받으셔서 설치하시면 됩니다.

설치를 마쳤으면, Application(응용 프로그램)폴더로 이동하여 SCToolbarButton을 마우스로 클릭한 채로 Finder 윈도우 상단으로 드래그 하여 이동시킵니다.



svn에서 체크아웃 받을 폴더로 이동하여, SCToolbarButton을 클릭하면, svn 관련하여 익숙한 메뉴들이 나열됩니다.

여기서 당연히 Checkout을 클릭하시면 되겠죠? ' ㅅ')/
Checkout을 클릭하면, 저장소 주소(Repository URL), 본인 계정(Username, Password), Checkout받을 프로젝트 폴더 경로(Checkout to)를 설정해주시면 됩니다.



모든 설정을 완료한 뒤, Checkout 버튼을 클릭하면 끝!
간단하죠잉 ' ㅅ')/
이후부터는, SCToolbarButton을 통해 업데이트, 커밋을 사용하시면 됨돠.

그럼 저는 이만 뿅!
Posted by 벚꽃손님

댓글을 달아 주세요

  1. 어머 이건 허석 씨가 알려준건데용.

    2011.01.18 18:23 신고 [ ADDR : EDIT/ DEL : REPLY ]
  2. veggar

    가뭄에 단비 같은 글이군요. 감사합니다.^^

    2011.04.11 17:30 [ ADDR : EDIT/ DEL : REPLY ]
  3. 근데 사실 SCPlugin 보다는 svnX 가 좀 더 쓰기 편하고 좋아서 SCPlugin 은 안쓴 지 좀 되었습니다. 그리고 Xcode 4에서는 소스 관리 기능이 Xcode 에 좀 더 확실하게 통합되어서 많이 쓸만해졌습니다. 마지 VisualStudio 에 AnkhSVN 을 설치한 것처럼 말이죠.

    2011.07.21 11:44 신고 [ ADDR : EDIT/ DEL : REPLY ]