Qt App을 Mac Appstore에 올리기 > QT 강좌/팁

본문 바로가기
사이트 내 전체검색

QT 강좌/팁

QT/X11 Qt App을 Mac Appstore에 올리기

페이지 정보

작성자 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 3건 조회 8,218회 작성일 14-07-02 17:14

본문

이글은 제가 podovat.com의 blog 올린글(http://www.podovat.com/?p=195)에서 퍼온것입니다.

Qt App을 Mac Appstore에 올리기

*** Qt settings ***
기본적으로 Qt의 기본설정파일이 ~/Application Support/Preferences/com.trolltech.plist 에 생성되는데
이것은 Mac App Store의 정책(설정 파일은 반드시 응용프로그램의 번들 식별자(이름, 회사이름)와 같아야함)을 위반한다.
이 문제점을 해결하기 위해서 Qt 4.8.1부터 다음의 두가지 상황에 대해
Global Qt 설정을 응용프로그램의 Local 설정파일에 저장을 한다.

1. 응용프로그램이 샌드박스로 실행하거나
2. info.plist에 "ForAppStore"값을 "yes"로 설정해야 한다.

위와같은 상황에서 응용프로그램읜 번들 식별자가 설정 파일이 되고, Global Qt 설정은 해당파일의
"QtLibrarySettings"라는 파일로 저장된다.
만약에 샌드박스 형태로 사용할 경우, 설정파일이 정상적으로 생성되고
그렇지 않은경우 info.plist 파일에 "ForAppStore"키에 "yes"값을 넣어야지 제대로 동작을 한다.


*** 샌드박스에서 파일 저장 다이얼로그 ***
샌드박스 내에서는 파일 저장 다이얼로그의 기본 파일명이 비어 있지 않아야 제대로 동작된다.
다음과 같이 기본 파일명을 넣어주어야 한다.
[code]
QString fileSavePath = QFileDialog::getSaveFileName(this, "Save file", "default filename");
[/code]
또는 직접 QFileDialog객체를 생성했다면 다음과 같이 처리 하면 된다.
[code]
QFileDialog *fileSaveDialog = new QFileDialog(this);
fileSaveDialog->setAcceptMode(QFileDialog::AcceptSave);
fileSaveDialog->selectFile("default filename");
[/code]
참고) 파일 열기 다이얼로그는 특별한 문제가 없음


*** 데이타, 캐시 위치 ***
만약 QDesktopServices::storageLocation()함수를 이용해 DataLocation 또는 CacheLocation을
얻기위해 사용하는 경우, iTunes Connect의 값과 같은 응용프로그램 과 조직(organization)이름을
사용해야 한다.
만약 일치하지 않는경우, 소스코드에서 다음과 같이 application이름과 조직(organization)이름을
지정해 주면 된다.
단, 이름 지정은 QApplication객체가 생성되기 전에 해 주어야 한다.
[code]
QApplication::setOrganizationName("MyCompany");
QApplication::setApplicationName("MyApp");
[/code]
참고) iTunes Connect에서는 지역화(localized)된 application이름과 조직(organization)이름을 허용하지 않기 때문에, 위 함수를 통해 이름을 지정하는데 주의를 해야 한다.


*** info.plist와 프로그램 아이콘 ***
qmake가 생성하는 info.plist파일은 Mac App Store에서 필요로 하는 키가 존재하지 않는다.
따라서 프로그램 이름등으로 새로운 plist를 지정(예, MyAppInfo.plist) 하여 만들고 qmake에 의해서
덮어쓰지 않도록 하기 위해 다음과 같은 설정내용을 pro 파일에 기록을 한다.
[code]
QMAKE_INFO_PLIST = MyAppInfo.plist
[/code]
plist파일의 생성은 "Submitting to the Mac App Store"라는 애플 공식 문서를 참고 한다.
(https://developer.apple.com/library/mac/#releasenotes/General/SubmittingToMacAppStore/_index.html)
근데, 이것은 내용이 너무 복잡해서, 다음의 URL에서 복사를 해 오는게 편하다.
(http://hartcw.com/francis/qt-and-the-mac-app-store/)

아이콘은 pro파일에 다음과 같이 쓰면 된다.
[code]
ICON = MyApp.icns
[/code]
mac 아이콘 포맷은 icns는 png파일을 이용해서 변환할 수 있는데,
http://iconverticons.com/ 에서 자동으로 변환시키는 웹기반 도구를 제공한다.


*** 디버그 심볼 ***
Mac App Store에 올리기 위해서는 디버그 심볼 정보를 생성해야 한다.
pro 파일에 다음과 같이 추가를 한다.
[code]
QMAKE_CFLAGS += -gdwarf-2
QMAKE_CXXFLAGS += -gdwarf-2
[/code]
디버그 심볼은 dsymutil 이라는 명령을 이용해서 추출해 낼 수 있다.
[code]
dsymutil MyApp.app/Contents/MacOS/MyApp -o MyApp.app.dSYM
[/code]

*** 코드 사이닝 ***
코드사이닝을 하기전에 macdeployqt(~/QtSDK/Desktop/Qt/4.8.1/gcc/bin/macdeplyqt)를 이용해 번들내에 Qt Frameworks와 플러그인을 복사를 한다.
작성하는 프로그램에서 사용하고 있지 않는 Qt Frameworks와 플러그인을 제거해서 용량을 줄이도록 한다.
이제 Qt Framework, plug-in, 응용프로그램을 모두 사이닝한다.
이 작업은 굳이 App Store의 승인이 없어도 되는데, 언사인되었다는 경고가 발생한다.
애플 공식 사이트에서 코드 사인에 필요한 인증서를 얻어서 다음과 같이 사인을 한다.

Qt Framework의 사인은 다음과 같이 하고
[code]
codesign -s "3rd Party Mac Developer Application: Developer Name" MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
[/code]
응용프로그램의 사인은 다음과 같이 한다.
[code]
codesign -s "3rd Party Mac Developer Application: Developer Name" --entitlements MyEntitlements.plist MyApp.app
[/code]

만약 샌드박스를 사용하지 않는경우 "--entitlements MyEntitlements.plist" 옵션을 제거할 수 있다.
코드사인과 관련된 문서는 Apple's Code Signing Guide(http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Introduction/Introduction.html) 와 Apples Technical Note 2206(https://developer.apple.com/library/mac/#technotes/tn2206/_index.html)을 참조한다.

*** 인스톨 패키지 만들기 ***
다음과같이 productbuild명령을 이용해서 인스톨 패키지를 만든다.
[code]
productbuild --component MyApp.app /Applications --sign "3rd Party Mac Developer Installer: Developer Name" MyApp.pkg
[/code]

만들어진것을 테스트 하려면 다음과 같은 명령을 입력한다.

[code]
sudo installer -store -pkg MyApp.pkg -target /
[/code]

*** 프로젝트 파일 예제 ***
다음의 pro파일은 위의 과정에 나온 것에 대한 예제이다.
[code]
macx {
# Name of the application signing certificate
APPCERT = \"3rd Party Mac Developer Application: \"
# Name of the installer signing certificate
INSTALLERCERT = \"3rd Party Mac Developer Installer: \"

# Bundle identifier for your application
BUNDLEID = com.yourcompany.MyApp

# Name of the entitlements file (only needed if you want to sandbox the application)
ENTITLEMENTS = Entitlements.plist

ICON = MyApp.icns
QMAKE_CFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_OBJECTIVE_CFLAGS_RELEASE = $$QMAKE_OBJECTIVE_CFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO
QMAKE_INFO_PLIST = MyAppInfo.plist
OTHER_FILES += MyAppInfo.plist \
$${ENTITLEMENTS}
codesign.depends += all
codesign.commands += macdeployqt $${TARGET}.app;

# Remove unneeded frameworks (uncomment and change to suit your application)
#codesign.commands += rm -r $${TARGET}.app/Contents/Frameworks/QtDeclarative.framework;

# Remove unneeded plug-ins (uncomment and change to suit your application)
#codesign.commands += rm -r $${TARGET}.app/Contents/PlugIns/accessible;

# Extract debug symbols
codesign.commands += dsymutil $${TARGET}.app/Contents/MacOS/$${TARGET} -o $${TARGET}.app.dSYM;

# Sign frameworks and plug-ins (uncomment and change to suit your application)
#codesign -s "$APPCERT" -i $BUNDLEID $${TARGET}.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore
#codesign -s "$APPCERT" -i $BUNDLEID $${TARGET}.app/Contents/PlugIns/imageformats/libqjpeg.dylib

# Sign the application bundle, using the provided entitlements
codesign.commands += codesign -f -s $${APPCERT} -v --entitlements $${ENTITLEMENTS} $${TARGET}.app;
product.depends += all

# Build the product package
product.commands += productbuild --component $${TARGET}.app /Applications --sign $${INSTALLERCERT} $${TARGET}.pkg;
QMAKE_EXTRA_TARGETS += codesign product copyfiles
}
[/code]

위의 내용을 pro 파일에 복사를 하고 인증에 관련된 이름, plist file 이름등등을 본인의 환경에 맞게 수정을 한다.
응용프로그램을 빌드 했다면, 다음과 같이 코드사인을 하고
(macdeployqt가 path아 안걸려 있다면 다음과 같이 PATH를 추가한다.
[code]
export PATH=$PATH:$HOME/QtSDK/Desktop/Qt/4.8.1/gcc/bin)
make codesign
[/code]

다음과 같이 product 패키지를 만든다.
[code]
make product
[/code]

이제 테스트를 하기에 앞서 이미 실행중인지를 확인하고, 다음과 같은 명령을 이용해서 테스트를 해본다.
(이때 주의 해야할 것은 현재 디렉토리에 MyApp.app 디렉토리가 있는경우 /Applications에 설치되지 않고 현재 디렉토리에 설치되므로
Launchpad에서 표시되기 위해서는 현재 디렉토리의 MyApp.app 디렉토리를 삭제한 후에 다음의 명령을 실행한다.)
[code]
sudo installer -store -pkg MyApp.pkg -target /
[/code]

이제 Mac App Store에 올리기 위해 작업이 모두 끝났다.



*** 참고 URL ***
- http://www.digia.com/en/Blogs/Qt-blog/Pasi_Matilainen/Dates/2012/4/How-to-Publish-Qt-Applications-in-the-Mac-App-Store/
- https://developer.apple.com/library/mac/#releasenotes/General/SubmittingToMacAppStore/_index.html
- http://hartcw.com/francis/qt-and-the-mac-app-store/

추천0

댓글목록

Total 198건 1 페이지
QT 강좌/팁 목록
번호 제목 글쓴이 조회 추천 날짜
198 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 3886 0 09-10
197 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5451 0 12-03
196 QT/X11 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6847 1 03-07
195 QT/Embedded no_profile 요원009 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 11228 0 11-13
194 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6414 0 05-18
193 QT/Embedded no_profile 잉농 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6172 0 05-14
192 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6550 0 04-01
191 QT/Embedded no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 21872 1 03-31
190 QT/Win32 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13204 0 03-17
189 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5845 0 02-13
188 QT/Win32 no_profile 인라이너 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5763 1 02-12
187 QT/Embedded no_profile 김아무개 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 16068 0 11-12
186 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5824 0 11-11
185 QT/Embedded no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5884 0 11-11
184 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10509 0 10-22
183 QT/Win32
Qt와 C++11 댓글+ 2
no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10845 1 10-12
182 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10470 0 10-09
181 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7525 0 10-02
180 QT/Win32 no_profile devilqoo 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8610 0 10-01
179 QT/X11 no_profile 별님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 5411 0 09-25
178 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6047 0 09-16
177 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7522 0 09-03
176 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7449 0 09-02
175 QT/Win32 no_profile tmdwn 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 7935 2 09-02
174 QT/X11 no_profile 나무나무나무 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8355 0 07-25
173 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6751 2 07-11
172 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 9357 2 07-09
171 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 6558 2 07-08
170 QT/Win32 no_profile 구름님 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 13030 1 07-07
열람중 QT/X11 no_profile korone 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 8219 0 07-02
게시물 검색

  • 게시물이 없습니다.

회원로그인

설문조사

새로운 홈페이지에 대한 평가

접속자집계

오늘
72
어제
497
최대
3,878
전체
4,081,912

Copyright © korone.net. All rights reserved.