App 구현 시간보다 App 등록 준비한 시간이 더 길었다.

App 개발에 2일, App 등록하는 과정에 여러 가지 일들을 하다 보니 5일 정도 걸렸다. App 등록이 처음이라 신기하면서 재미있었다.

그 중에 기억에 남는 것 몇 가지를 적어본다.

TestFlight

TestFlight를 이용하면 만든 App을 실제 iOS 장비에서 설치해서 테스트하는 방법을 제공한다.

내부 테스트와 외부 테스트 2가지 형태로 테스트할 수 있다. 내부 테스트는 최대 25명의 테스터를 초대할 수 있고, 한 사람당 최대 10대의 장비에서 테스트할 수 있다. 내부 테스트를 위한 App은 별도의 심사 없이 바로 테스터들이 테스트할 수 있다. 외부 테스트는 최대 2,000명의 테스터를 초대할 수 있지만, 테스트 시작하기 전에 외부 테스트를 위한 App은 심사를 거쳐야 한다.

Xcode의 archive 명령으로 App을 제출한 후, itunes connect에서 TestFlight에서 App의 버전을 선택하여 테스트를 진행한다.

테스터의 장비에는 TestFlight App을 설치하면 테스트용 앱을 설치할 수 있게 된다.

TestFlight App

App 동작 화면 찍기

App 심사를 위해서 동작 화면을 찍어서 올려야 하는데, 안내 문서의 동작 화면에 대한 내용을 보니 다양한 요구 조건들이 나와 있다.

일일이 직접 찍기 귀찮기도 하고, 화면의 변경되었을 경우 매번 다시 찍어야 해서 자동화하는 방법을 찾아보니 여러 가지 방법들이 검색된다. 역시 뛰어난 개발자들이 이미 고민을 했고, 해결법들을 제공하고 있었다.

그중에서 선택한 것은 fastlanesanpshotframeit이었다.

snapshot

snapshot은 XCode의 UI Tests를 이용해서 snapshot을 찍는다. snapshot에서 제공하는 SnapshotHelper.swift를 포함 시킨 후, UI Test로 찍을 동작 화면을 만들어 찍는다. 대략 이런 형태로 UI Test 코드를 작성한다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class CalculatorForWoodWorkerUITests: XCTestCase {
        
    override func setUp() {
        super.setUp()

        /* 초기화 */
        let app = XCUIApplication()
        setupSnapshot(app)
        app.launch()

    }

    func testCalculator() {
        let app = XCUIApplication()
        
        let textFieldQuery = app.descendantsMatchingType(.TextField)
        
        let widthTextField = textFieldQuery["woodWidth"]
        widthTextField.tap()
        widthTextField.typeText("100")

        /* UI 동작 중간 생략 */

        /* 화면 찍기 */
        snapshot("0Calculator")
    }
}

화면을 찍을 대상 장비와 언어를 Snapfile 설정 후, 실행시키면 자동으로 동작 화면들이 그림으로 저장된다.

frameit

frameit은 snapshot으로 만들어진 이미지를 실제 장비에서 수행되는 것처럼 이미지를 만들어준다.

frameit 동작 화면(출처 - github)

Apple에서 제공하는 장비 이미지를 내려받아 설치 후, frameit을 실행하면 된다.

홈페이지

App에 대한 설명 및 지원을 위한 홈페이지도 필요하다. 백수 개발자가 비용들이지 않고 이용할 수 있는 최고의 선택은 Github Pages가 아닌가 싶다.

코딩만 할 줄 알고 디자인 이런 거에 문외한이기 때문에 있는 것을 그대로 가져다 이용했다. bootstrapLandy 테마를 가져다 index.html의 내용과 이미지만 살짝 변경했다. 그럴싸해 보인다.

홈페이지