[Flutter] ipa build 및 browser를 통한 ipa 설치 설정 방법
apk build에 이은 ipa build 정리.
apple developer 및 기기등록 등이 모두 되어있다고 가정하고 진행한다. (검색하면 많이 나온다.)
1. flutter build ipa
반드시 xCode -> [Product] -> [Archive]가 아닌 flutter build ipa 명령어를 사용하여 Runner.xcarchive를 만든다. xCode로 빌드할 경우 이전 빌드 내역 그대로 빌드되니 주의하자.
2. Archives
xCode -> [Window] -> [Organizer]로 들어가 Archives를 켠다. 생성된 Runner.xcarchive 파일을 실행하는 방법으로도 켜진다. Runner.xcarchive 파일을 실행하는 방법으로 켜면... 같은 Runner.xcarchive 파일이라도 Archives list에 중복으로 뜨니 이 점 주의.
Creation Date와 Version으로 build하고자 하는 archive가 맞는지 확인하고 선택한 후 [Distribute App]을 누른다.
3. Distribute App
- 추출 방법 선택: release test용이라면 Ad Hoc을 선택한다.
- 옵션 선택: Include manifest for over-the-air installation를 반드시 선택해야 한다. App Thinning은 None으로 둬도 큰 문제가 없었다.
- manifest information: 이름과 3개의 url을 입력한다. url은 추후 변경이 가능하므로 아무거나 넣어도 상관 없다.
이후 서명까지 완료하면 자동으로 ipa가 추출된다.
4. 추출 후 배포
1. manifest.plist 파일을 수정한다. 형식은 아래와 같다.
item 0의 url은 ipa가 저장된 경로(후술), item 1과 item 2의 url은 앱 아이콘 이미지가 저장된 경로(후술).
ipa 및 이미지는 dropbox를 많이 이용한다. 추출한 ipa 파일(manifest.plist 파일과 같은 경로 혹은 Apps directory 아래에 있다.)과 이미지 파일을 dropbox에 저장한 후 그 링크를 사용하면 된다. 이때 dropbox link는 https://www.dropbox.com/s/...
에서 https://dl.dropboxusercontent/s/...
로 변경한다. 추후 html 파일에 사용할 link 역시 https://dl.dropboxusercontent/s/...
로 변경하여 사용한다.
2. 수정한 manifest.plist를 dropbox에 올린다.
3. 아래와 같은 html 파일을 만든다. link를 이용하는 것이기 때문에 꼭 똑같이 할 필요는 없지 않을까 싶다.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>IPA 다운로드</title>
</head>
<body>
<ul>
<li><a href="itms-services://?action=download-manifest&url=https://dl.dropboxusercontent.com/s/.../manifest.plist">다운로드</a></li>
</ul>
</body>
</html>
html file에 들어가는 링크는 manifest.plist의 링크이다.
호스팅까지 완료하면 된다. dropbox에 html 파일을 올려도 되긴 한데, html 양식으로 보이지 않거나 링크 연결이 안 되는 문제가 생기기도 해서 페이지 하나 호스팅하는 쪽이 더 안정적이고 확실한 것 같다.
manifest.plist link를 이용하기 때문에, ipa 업데이트 시 html을 바꿀 필요 없이 dropbox에 같은 이름으로 업로드만 하면 된다. 만약 ipa url이 바뀐다면 manifest.plist만 수정해주면 왼다.
'Flutter' 카테고리의 다른 글
[Dart] dart:ffi NativeType 관련 정리 및 Pointer 사용법 (추후 추가) (0) | 2022.03.24 |
---|---|
[Flutter] ipa build Xcode segmentfault 11 문제 (0) | 2022.03.22 |
[Flutter] class operator override (0) | 2021.12.17 |
[Flutter] 현재 url 가져오기, 새 창으로 열기 (0) | 2021.12.13 |
[Flutter] GetX 컨트롤러 관리 관련 간단 정리 (0) | 2021.11.16 |