swtest

Appium iOS real device 환경 구축하기


by Kitle · 2020. 10. 23.



Appium + iOS 조합의 가장 큰 허들은 바로 환경설정이 아닐까 싶습니다. 공식 문서를 봐도 어렵고, 예외 사항들이 많아서 대부분 여기서 포기하시는 분들이 많습니다. 그래서 정리했습니다. 하나하나 차근차근 따라오시기 바랍니다.


중간에 굉장한 장애물들이 나올 수 있습니다. 그리고 어느상황에서나 정답이 아닐 수 있습니다. 제가 놓친 부분이 있을 수 있고, 각 환경마다 다른 부분이 있어 동작하지 않는 경우는 하나하나 차근차근 해보시고, 잘 되지 않는 부분은 게시판으로 문의주세요.



준비사항

- MacOS PC - 예) 맥북, 아이맥 등


- 아이폰 - 또는 아이패드


- 맥북과 아이폰을 연결할 케이블


- 아이폰에서 구동가능한 테스트용 앱(.ipa 파일)


 > 없는 경우 현업 QA/Tester 분들이시라면 개발팀에 지원을 얻어 .ipa 파일을 빌드 받으세요. 빌드는 Product 환경이 아닌  debug 용으로 빌드해야 합니다.


 > 이때 실제 테스트할 폰의 udid 가 등록되어 있어야 합니다. 테스트 폰의 Udid를 개발팀에 드리고, 테스트 빌드에 프로필 추가를 요청해주세요.



udid 알아내는 법

맥북을 USB로 연결 후 터미널에서 다음과 같은 명령어를 수행합니다.


instruments -s devices



내 아이폰 이름 옆 (OS버전) [UDID]    가 표시됩니다. [] 안의 내용이 UDID입니다. UDID 를 알아내는 방법은 많이 있습니다. 다만 대문자로만 표기되는 경우가 있으니 이 경우 Appium 에서 제대로 인식하지 않습니다. 꼭 대소문자를 구분하여 얻어오셔야 합니다. Apple Configurator 2 의 경우 대문자로 표시해주어 인식이 되지 않았었습니다.


 > 개인 개발자의 경우는 스스로 빌드하여 생성가능하므로 직접 ipa 파일을 만드시면 될 것 같습니다.



Xcode 사용을 위한 권한 생성하기

- 애플 아이디를 만들어 iPhone Developer 권한을 습득해야 합니다. 회사(Team) 내의 Apple Admin 계정으로 권한을 추가할 수 있을 겁니다.


- 중간에 키체인을 업로드 하고 인증서를 다운로드 하는 과정이 있을 겁니다. Admin 이 요청하는 경우 진행하시면 됩니다.


 (자세한 설명은 https://help.apple.com/developer-account/#/devbfa00fef7 를 참고해주세요) 인증서를 전달받으셨으면 추가된 인증서를 맥북에 다운로드 받습니다.




Mac OS 준비

iOS 테스트를 위해서는 MacOS가 꼭 필요합니다.  윈도우 OS는 불가능 한 것으로 알고 있습니다.

가능한한 Mac OS를 최신버전으로 업데이트 해줍니다.(필수아님) 

본 가이드에서 진행한 OS버전은 macOS Catalina v10.15.4 입니다.



라이브러리 설치

추가적으로 필요한 라이브러리를 맥북에 설치해주겠습니다.

맥북의 터미널을 실행합니다. 터미널 화면에서 다음 입력어를 입력하고 엔터를 칩니다.


brew install carthage


명령어를 통해 설치합니다. (명령어 안먹히면 Home brew 먼저 설치, 이거는 구글 검색으로 설치해주세요.)

이미 설치되어 있는 경우는 스킵하셔도 됩니다.




MacOS의 Xcode 앱 업데이트

PC를 부팅하고 AppStore에 진입합니다.



앱스토어에서 'xcode'로 검색합니다. xcode 는 MacOS의 기본 탑재된 개발 툴 입니다. 최신버전으로 업데이트 되어 있는지 체크합니다.

최신버전이 아니라면 업데이트를 눌러 진행합니다. 하드디스크 용량이 부족한 경우 업데이트가 되지 않을 수 있습니다.


기본적으로 맥북에 깔려 있으나 업데이트가 되어 있지 않으면 최신 SDK 가 없어서 동작을 하지 않을 수 있기에 최신 버전을 권장합니다.


업데이트는 업데이트 상황에 따라 수십분 이상 오래 걸릴 수 있습니다. 



MacOS의 Xcode 실행 및 추가 항목 설치하기

실행하면 상황에 따라 추가 플러그인(파일)을 설치하겠냐고 물을 겁니다. 설치해주십시오.


Xcode 에서 WebDriverAgent 프로젝트 받아오기

 Appium에서 iOS를 컨트롤 하기 위해서는 WebDriverAgent가 필요합니다. 웹드라이버 에이전트(이하 WDA라 함)를 xcode 프로젝트로 가져오도록 하겠습니다.

xcode 실행 > Clone an existing project 선택합니다.


git 을 통해 가져오도록 하겠습니다. 다운로드 방식을 쓸 수 있지만, 제 생각엔 git으로 받아오는 버전이 더 정상적으로 되는 것으로 판단했습니다. 다소 어렵게 느껴질 수 있지만 다음의 순서대로 잘 따라해주세요.


빈 창이 하나 뜨면 상단 Enter repository URL에 https://github.com/appium/WebDriverAgent.git 을 입력합니다.



choose a branch to checkout 메뉴에 디폴트로 master 브랜치가 선택되어 있을텐데, 변경없이 그대로 두고 'Clone'을 선택합니다.

가져올때 폴더를 지정하는데 특별한 일이 없는 이상 /Documents/ 문서 폴더에 하는 것을 추천합니다.

xcode에서 프로젝트를 잘 가져왔다면, 한가지 설정을 한 후 다시 xcode를 시작해보겠습니다.

xcode를 종료합니다.


터미널에서  WDA 프로젝트로 이동 후 bootstrap 명령어로 셋업하기

맥북의 터미널 앱을 사용하여 /Users/<YourMacName>/Documents/WebDriverAgent 폴더로 이동합니다.

cd /Users/<YourMacName>/Documents/WebDriverAgent

폴더 이동 후 다음과 같은 명령어를 수행하여 프로젝트 설정을 하게 됩니다.

./Scripts/bootstrap.sh -d


계정 생성 및 개발자 권한 계정 등록하기

위의 명령어 까지 마쳤다면 xcode를 실행합니다.

Xcode 메뉴 > Preference > Accounts 탭으로 이동합니다.


+ 버튼을 눌러 위에서 권한을 부여받았던 Apple 계정을 선택하고 로그인 합니다.




로그인이 완료되면 왼쪽 Apple IDs 에서 나타날 겁니다.

위에서 권한을 획득한 등록한 계정을 선택하고, Team / Role 부분을 확인한 뒤 'Download Manual Profiles' 를 클릭해줍니다.
이제 Accounts 창을 닫습니다.


이제 다시 xcode를 실행해 봅니다.

아까 Clone으로 가져왔던 WebDriverAgent 프로젝트가 보일 것입니다. 이부분을 클릭하여 실행 합니다.
이제 아까 만들었던 WebDriverAgent 프로젝트를 Open 합니다.


Signing and Bundle indentifier 수정 하기

WebDriverAgent 프로젝트를 오픈하면 왼쪽 프로젝트 네비게이터에  'WebDriverAgent" 가 기본으로 선택되어 있습니다. 여기서  중앙화면 TARGETS에서 WebDriverAgentLib을 선택합니다.
왼쪽 브라우저 메뉴에서 WebDriverAgent 를 선택하고 ‘Signing & Capabilities’ 메뉴로 진입합니다.
Team 부분에 권한을 부여받은 계정을 선택합니다.

두번째로 Bundle Identifier 부분을 com.facebook.WebDriverAgentLib 에서 com.facebook 부분만 겹치지 않게 붙여줍니다.
ex) com.blabla.WebDriverAgentLib 등

중앙화면 TARGETS에서 한군데 더 같은 작업을 반복할겁니다.
이번엔 WebDriverAgentRunner를 선택해줍니다.
team / Bundle 부분을 위와 같이 다시한번 변경 합니다.


WebDriverAgentRunner 빌드 및 테스트 하기

이제 USB 케이블로 맥북과 테스트 할 실 단말기를 연결합니다. *실 단말기와 맥북은 같은 네트워크(Wifi에 연결합니다)
연결 시 신뢰할 수 있는 장치인지 묻는다면 Yes로 선택해 줍니다.

Xcode 상단 화면에서 지금 연결한 iPhone을 선택합니다. 타겟에 WebDriverAgentRunner 가 선택된 상태에서,
상단의 ' > ' Build and Run 버튼을 눌러 빌드가 이상없는지 확인합니다. 성공메세지가 잘 나올 겁니다.

이번에는 상단 메뉴의 Product > Test 버튼을 눌러 실행합니다.
권한 문제가 발생하는 경우 아이폰의 설정 > 일반 > 프로파일 및 기기관리 > 에서 개발자 앱의 권한을 허용해 줍니다.

권한 문제가 해결되었으면 다시 Product > Test 를 실행해 줍니다. 정상적으로 실행이 되었다면 이번에는 

View > Debug Area > Activate Console 을 클릭합니다.

Test Case '-[UITestingUITests testRunner]' started.
    
t =     0.00s Start Test at 2020-10-22 14:59:53.208
   
t =     0.00s Set Up
2020-10-22 14:59:53.221633+0900
WebDriverAgentRunner-Runner[911:60980]
Built at Oct 22 2020 14:29:51
2020-10-22 14:59:53.249413+0900
WebDriverAgentRunner-Runner[911:60980]
ServerURLHere->http://192.168.3.103:8100<-ServerURLHere

다음과 같은 메세지가 떠 있다면 성공한 겁니다. 이 ip 부분은 꼭 기록해 둡니다. 이 ip 는 연결한 핸드폰의 ip 입니다. 위는 예시이며 여러분들의 상황에 따라 달라질겁니다.


추후 Xcode를 사용하지 않고 커멘드라인에서 띄우려면 다음과 같이 사용해주세요.
[CLI 에서 실행하기]
터미널 앱을 사용하여 /Users/<YourMacName>/Documents/WebDriverAgent 폴더로 이동
cd /Users/<YourMacName>/Documents/WebDriverAgent
(폴더 이동 후)
xcodebuild -project WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination "id=UDID" test

UDID는 iPhone의 UDID로 변경해줘야 합니다.

이제 아이폰을 컨트롤 할 수 있는 준비가 완료 되었습니다. 후 매우 힘드네요 이제 거의다 왔습니다.
Appium 쪽으로 가보겠습니다.


Appium 다운로드 및 설치

https://github.com/appium/appium-desktop/releases/latest 
에서 다운로드 하였습니다.
본 가이드 Appium Version은 1.17.1-1 이네요. 시간이 지나면 더 높은 버전이 보일겁니다.


Appium 실행

Appium 을 실행하고, Start Server를 클릭합니다.



돋보기 모양을 눌러 Inspector 를 실행합니다.
Automatic Server 탭을 눌러 주소가 http://localhost:4723 임을 확인하시고, Desired Capabilities 를 수정해주겠습니다.
다음을 활용하여 수정합니다. JSON Representation 수정 버튼을 눌러 수정하고 저장합니다.


예시입니다 적절히 수정해주세요
{
"deviceName": "iPhone",

"platformVersion": "14.1",

"platformName": "ios",

"app": "/Users/YourMacName/yourtestapp.ipa",

"automationName": "XCUITest",

"noReset": true,

"udid": "YOURIPHONEUDID",

"xcodeOrgId": "YourOrgId",

"xcodeSigningId": "iPhone Developer",

"wdaBaseUrl": "http://Xcode콘솔에 표시된URL"
}



deviceName 은 연결한 아이폰의 이름입니다. 아이폰 > 설정 > 정보 > 이름 부분에 표시되는 이름과 같이 넣으시면 됩니다.
platformVersion은 연결한 아이폰의 버전입니다.  아이폰 > 설정 > 정보 > 소프트웨어 버전에 표시되는 숫자입니다.
"platformName": "ios", 그대로 두시면 됩니다.
app 은 실제 Appium에서 사용할 아이폰 앱 파일입니다. 보통 .ipa 파일로 되어있습니다.
"automationName": "XCUITest", 는 그대로 두시면 됩니다.

"noReset": true, 이부분도 그대로 두시면 됩니다. 그렇지 않으면 매번 앱을 지웠다 깔았다 합니다. 추후 리셋이 필요한 경우 False 로 변경하시면 됩니다.
"udid" 는 아이폰 고유의 단말 번호입니다. udid 알아내기는 위에어 설명 드렸으니 위의 설명을 참고 부탁합니다.
xcodeOrgId 는 해당 테스트하려고 하는 앱 소유 조직 아이디를 적어주시면 됩니다. 
https://developer.apple.com/ 로그인 하시어 Certificates 메뉴진입하면 이름 아래에 표시됩니다. 권한이 없거나 알기가 어려울 경우 회사의 경우 개발팀에게 문의합니다. 
"xcodeSigningId": "iPhone Developer", 는 그대로 두시면 됩니다.
"wdaBaseUrl": "Xcode 에서 콘솔에서 보여주는 ServerURLHere 값을 입력해주시면 됩니다.


인스펙터 시작하기

모든것이 준비되었다면 Start Session 을 누릅니다.

드디어 인스펙터가 화면에 떴습니다.

왼쪽 화면은 보안상 가렸습니다. 이제 스크립트 녹화, 수정이 가능하겠네요.
이부분은 크게 어렵지 않으니 직접 해보시기를 바랍니다.

적다보니 굉장히 길어졌습니다. 분명 개인 환경에 따라 맞지 않는 부분이 많을 것이고, 저도 이미 세팅된 환경을 기준으로 다시 되짚어가며 캡쳐한 것이기 때문에 안맞거나 부족한점은 게시판으로 알려주시면 확인 후 수정 반영 하도록 하겠습니다.

모두 성공하시길 바랍니다~


참고 사이트 :
Appium 공식 사이트 : http://appium.io/docs/en/drivers/ios-xcuitest-real-devices/
WDA 연결 방법 설명 :  https://velog.io/@chacha/FacebookWDAiOS-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%8B%A4%ED%96%89
Inspector 연결 : https://www.mutuallyhuman.com/blog/webdriveragent-getting-started-with-automated-ios-testing/