SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
37장

애플리케이션 

배포하기
빌드 설정

❖

디버그 빌드는 

개발 시스템 아키텍처(32, 64bit)에 맞는 바이너리 생성.!
❖

디버깅에 유용.!

❖

빌드 시간 단축.
릴리즈 빌드
❖

배포를 위한 빌드.!
❖

최적화.!

❖

디버깅 심볼 제거.!

❖

모든 아키텍처(32, 64bit)에 대해 바이너리를 빌드.
전처리 매크로

❖

NSAssert 사용하지 않기 위해
NS_BLOCK_ASSERTIONS 매크로 정의.!

❖

타켓 | Build Settings | Preprocessor Macros [그림 37.2]!

❖

<<ProjectName>>_Prefix.pch 에 보통 정의.
릴리즈 빌드 만들기
❖

Product | Archive 통해 생성.!

❖

아카이빙 기능!
❖

애플리케이션의 다양한 릴리즈 빌드를 분류!

❖

디버그 심벌 유지
인스톨러
❖
❖

인스톨러를 만들지 말라.!
앱을 다운로드 폴더에서 

/Application 으로 드래그 & 드롭.!

❖

앱을 Zip 으로 압축 이용.!

❖

DMG 파일 이용.!
❖

❖

readme 파일, /Application 링크 추가.!

맥 앱스토어에는 인스톨러를 사용할 수 없다.
샌드박싱(Sandboxing)

❖

❖

앱이 시스템을 손상하지 않는다는 것을 

신뢰할 수 있는 경우.!
신뢰할 수 있는 앱의 버그로 인하여 

시스템 손상이 발생하는 경우.
권한(Entitlements)

❖

❖

앱이 할 수 있는 것에 

대한 권한을 명시.!
OS는 

해당 액션만을 허용.
파워박스(Powerbox)
❖

NSOpenPannel, NSSavePannel 을 통해 파일을 선택.!

❖

파워박스라는 시스템 데몬에 의해 파일 접근.!

❖

코드 수정이 필요하지 않다.!

❖

앱 종료시 다시 문서를 복원하거나,

Open Recent 메뉴 선택시 비슷한 기능 제공.
맥 앱 스토어(Mac App Store)
❖

❖

❖

MAS 이용시 앱구입, 인스톨, 패키징, 배포, 라이선스등을 

고민하지 않아도 된다.!
샌드박스 환경에서 동작하지 않거나, 

리뷰 가이드라인을 따르지 않는다면 전통적인 방식.!
iOS 동일하게 바이너리에 서명, 앱 설명, 스크린샷을 만들
고 앱 제출, 리뷰받는다.
영수증 확인

❖

❖

iOS 처럼 운영체제 차원에서 

라이선스를 확인을 지원하지 않는다.!
불법 복제를 막을려면 영수증 확인 코드를 구현해야 함.
영수증
❖

앱 구입시 앱은 사용자 시스템에 복사.!

❖

앱 영수증을 포함하는 파일은 앱 번들안에 위치.!

❖

❖

영수증에는 

번들 확인자, 버전, 컴퓨터 GUID 해쉬 포함됨.!
애플은 이 영수증을 암호화해서 서명함.
영수증 확인 과정
❖

영수증이 존재하는지 확인.!

❖

애플이 영수증에 서명했는지 확인.!

❖

영수증의 번들 확인자가 일치하는지 확인.!

❖

버전 확인자가 일지 하는지 확인.!

❖

영수증의 컴퓨터 해쉬값이 

컴퓨터의 GUID 해쉬와 일치하는지 확인.
영수증 확인
❖

앱 번들에 plist 파일에 존재하는 값은 

수정될 수 있으므로 따로 저장해야 함.!

❖

영수증 확인에 실패하면 173 리턴 값으로 앱 종료해야 함.

if(!validated)

exit(173);!

❖

애플에서 전체 소스를 제공하지 않음.

단순 복사되어 크랙되는 것을 막기 위해.
영수증 확인 기타
❖

애플 또는 기타 코드 검색후 반드시 수정해서 적용.!

❖

인라인, goto, exception, 암호화, 여러번 확인 등등등…!

❖

❖

ITC 에서 테스트 계정을 만들고, 

생성된 앱을 실행, (173 종료)

애플 로그인창 실행,

테스트 계정 및 암호 입력.!
영수증 발급후 버전등이 변경되면 

로그아웃(부팅)후 다시 테스트 영수증 발급.

Más contenido relacionado

Similar a 32 osx app_release

효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxssuser2601f7
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf정민 안
 
WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용Keunhyun Oh
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016Amazon Web Services Korea
 
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016Amazon Web Services Korea
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드Devgear
 
swift를 이용한 카카오링크 만들기
swift를 이용한 카카오링크 만들기swift를 이용한 카카오링크 만들기
swift를 이용한 카카오링크 만들기KimDaeho
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
차세대 웹비즈니스를 위한 "HTML5"
차세대 웹비즈니스를 위한 "HTML5"차세대 웹비즈니스를 위한 "HTML5"
차세대 웹비즈니스를 위한 "HTML5"Changhwan Yi
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차Yeonah Ki
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법선협 이
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++jdo
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowByoung Do Ahn
 
Certificate 와 Provisioning Profile
Certificate 와 Provisioning ProfileCertificate 와 Provisioning Profile
Certificate 와 Provisioning Profilessuser9054541
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
RAD Studio XE7 Direct LIVE! in 광주
RAD Studio XE7 Direct LIVE! in 광주RAD Studio XE7 Direct LIVE! in 광주
RAD Studio XE7 Direct LIVE! in 광주Devgear
 

Similar a 32 osx app_release (20)

효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
LetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptxLetsSwift(강민규스피커,안정민서포터).pptx
LetsSwift(강민규스피커,안정민서포터).pptx
 
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
20221131_레츠스위프트_2022_iOS개발에서_알아두면_좋은것들.pdf
 
WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용WWDC2016 스터디 공유 발표 - 공유용
WWDC2016 스터디 공유 발표 - 공유용
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
아마존 게임엔진:Lumberyard :: Patel Pratik :: Gaming on AWS 2016
 
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
한 번에 개발하는 안드로이드&iOS 앱 with 앱메소드
 
swift를 이용한 카카오링크 만들기
swift를 이용한 카카오링크 만들기swift를 이용한 카카오링크 만들기
swift를 이용한 카카오링크 만들기
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
차세대 웹비즈니스를 위한 "HTML5"
차세대 웹비즈니스를 위한 "HTML5"차세대 웹비즈니스를 위한 "HTML5"
차세대 웹비즈니스를 위한 "HTML5"
 
React native development
React native developmentReact native development
React native development
 
게임프로그래밍입문 2주차
게임프로그래밍입문 2주차게임프로그래밍입문 2주차
게임프로그래밍입문 2주차
 
C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법C++ 코드 품질 관리 비법
C++ 코드 품질 관리 비법
 
오픈소스가이드 win,c++
오픈소스가이드 win,c++오픈소스가이드 win,c++
오픈소스가이드 win,c++
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-window
 
Certificate 와 Provisioning Profile
Certificate 와 Provisioning ProfileCertificate 와 Provisioning Profile
Certificate 와 Provisioning Profile
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
RAD Studio XE7 Direct LIVE! in 광주
RAD Studio XE7 Direct LIVE! in 광주RAD Studio XE7 Direct LIVE! in 광주
RAD Studio XE7 Direct LIVE! in 광주
 

Más de Kyungryul KIM

전문검색기술도전
전문검색기술도전전문검색기술도전
전문검색기술도전Kyungryul KIM
 
Nib_NSWindowController
Nib_NSWindowControllerNib_NSWindowController
Nib_NSWindowControllerKyungryul KIM
 
서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2Kyungryul KIM
 
Chaper24 languages high_and_low
Chaper24 languages high_and_lowChaper24 languages high_and_low
Chaper24 languages high_and_lowKyungryul KIM
 
Ch22 운영체제
Ch22 운영체제Ch22 운영체제
Ch22 운영체제Kyungryul KIM
 

Más de Kyungryul KIM (20)

Ch4 pugixml
Ch4 pugixmlCh4 pugixml
Ch4 pugixml
 
Node ch12
Node ch12Node ch12
Node ch12
 
11.scripting
11.scripting11.scripting
11.scripting
 
Meteor ddp
Meteor ddpMeteor ddp
Meteor ddp
 
Cocos2dx 7.1-7.2
Cocos2dx 7.1-7.2Cocos2dx 7.1-7.2
Cocos2dx 7.1-7.2
 
Cocos2 d x-7.3_4
Cocos2 d x-7.3_4Cocos2 d x-7.3_4
Cocos2 d x-7.3_4
 
Cocos2d x-ch5-1
Cocos2d x-ch5-1Cocos2d x-ch5-1
Cocos2d x-ch5-1
 
Coco2d x
Coco2d xCoco2d x
Coco2d x
 
23 drag drop
23 drag drop23 drag drop
23 drag drop
 
Hadoop ch5
Hadoop ch5Hadoop ch5
Hadoop ch5
 
전문검색기술도전
전문검색기술도전전문검색기술도전
전문검색기술도전
 
Nib_NSWindowController
Nib_NSWindowControllerNib_NSWindowController
Nib_NSWindowController
 
Dsas
DsasDsas
Dsas
 
서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2서버인프라를지탱하는기술5 1 2
서버인프라를지탱하는기술5 1 2
 
Chaper24 languages high_and_low
Chaper24 languages high_and_lowChaper24 languages high_and_low
Chaper24 languages high_and_low
 
Ch22 운영체제
Ch22 운영체제Ch22 운영체제
Ch22 운영체제
 
Mibis ch20
Mibis ch20Mibis ch20
Mibis ch20
 
Mibis ch15
Mibis ch15Mibis ch15
Mibis ch15
 
Mibis ch8
Mibis ch8Mibis ch8
Mibis ch8
 
Mibis ch4
Mibis ch4Mibis ch4
Mibis ch4
 

32 osx app_release

  • 2. 빌드 설정 ❖ 디버그 빌드는 
 개발 시스템 아키텍처(32, 64bit)에 맞는 바이너리 생성.! ❖ 디버깅에 유용.! ❖ 빌드 시간 단축.
  • 3. 릴리즈 빌드 ❖ 배포를 위한 빌드.! ❖ 최적화.! ❖ 디버깅 심볼 제거.! ❖ 모든 아키텍처(32, 64bit)에 대해 바이너리를 빌드.
  • 4. 전처리 매크로 ❖ NSAssert 사용하지 않기 위해 NS_BLOCK_ASSERTIONS 매크로 정의.! ❖ 타켓 | Build Settings | Preprocessor Macros [그림 37.2]! ❖ <<ProjectName>>_Prefix.pch 에 보통 정의.
  • 5. 릴리즈 빌드 만들기 ❖ Product | Archive 통해 생성.! ❖ 아카이빙 기능! ❖ 애플리케이션의 다양한 릴리즈 빌드를 분류! ❖ 디버그 심벌 유지
  • 6.
  • 7. 인스톨러 ❖ ❖ 인스톨러를 만들지 말라.! 앱을 다운로드 폴더에서 
 /Application 으로 드래그 & 드롭.! ❖ 앱을 Zip 으로 압축 이용.! ❖ DMG 파일 이용.! ❖ ❖ readme 파일, /Application 링크 추가.! 맥 앱스토어에는 인스톨러를 사용할 수 없다.
  • 8. 샌드박싱(Sandboxing) ❖ ❖ 앱이 시스템을 손상하지 않는다는 것을 
 신뢰할 수 있는 경우.! 신뢰할 수 있는 앱의 버그로 인하여 
 시스템 손상이 발생하는 경우.
  • 9. 권한(Entitlements) ❖ ❖ 앱이 할 수 있는 것에 
 대한 권한을 명시.! OS는 
 해당 액션만을 허용.
  • 10. 파워박스(Powerbox) ❖ NSOpenPannel, NSSavePannel 을 통해 파일을 선택.! ❖ 파워박스라는 시스템 데몬에 의해 파일 접근.! ❖ 코드 수정이 필요하지 않다.! ❖ 앱 종료시 다시 문서를 복원하거나,
 Open Recent 메뉴 선택시 비슷한 기능 제공.
  • 11. 맥 앱 스토어(Mac App Store) ❖ ❖ ❖ MAS 이용시 앱구입, 인스톨, 패키징, 배포, 라이선스등을 
 고민하지 않아도 된다.! 샌드박스 환경에서 동작하지 않거나, 
 리뷰 가이드라인을 따르지 않는다면 전통적인 방식.! iOS 동일하게 바이너리에 서명, 앱 설명, 스크린샷을 만들 고 앱 제출, 리뷰받는다.
  • 12. 영수증 확인 ❖ ❖ iOS 처럼 운영체제 차원에서 
 라이선스를 확인을 지원하지 않는다.! 불법 복제를 막을려면 영수증 확인 코드를 구현해야 함.
  • 13. 영수증 ❖ 앱 구입시 앱은 사용자 시스템에 복사.! ❖ 앱 영수증을 포함하는 파일은 앱 번들안에 위치.! ❖ ❖ 영수증에는 
 번들 확인자, 버전, 컴퓨터 GUID 해쉬 포함됨.! 애플은 이 영수증을 암호화해서 서명함.
  • 14. 영수증 확인 과정 ❖ 영수증이 존재하는지 확인.! ❖ 애플이 영수증에 서명했는지 확인.! ❖ 영수증의 번들 확인자가 일치하는지 확인.! ❖ 버전 확인자가 일지 하는지 확인.! ❖ 영수증의 컴퓨터 해쉬값이 
 컴퓨터의 GUID 해쉬와 일치하는지 확인.
  • 15. 영수증 확인 ❖ 앱 번들에 plist 파일에 존재하는 값은 
 수정될 수 있으므로 따로 저장해야 함.! ❖ 영수증 확인에 실패하면 173 리턴 값으로 앱 종료해야 함.
 if(!validated)
 exit(173);! ❖ 애플에서 전체 소스를 제공하지 않음.
 단순 복사되어 크랙되는 것을 막기 위해.
  • 16. 영수증 확인 기타 ❖ 애플 또는 기타 코드 검색후 반드시 수정해서 적용.! ❖ 인라인, goto, exception, 암호화, 여러번 확인 등등등…! ❖ ❖ ITC 에서 테스트 계정을 만들고, 
 생성된 앱을 실행, (173 종료)
 애플 로그인창 실행,
 테스트 계정 및 암호 입력.! 영수증 발급후 버전등이 변경되면 
 로그아웃(부팅)후 다시 테스트 영수증 발급.