1단말내에 같은 앱을 공존시키는 방법(ios편)

개요



개발용, 프로덕션용 등 같은 단말에 접속처가 다른 앱을 넣을 수 있으면 편리합니다.
1단말에 같은 Bundle Identifier 에서는 넣을 수 없기 때문에, 환경에 따라서 Bundle Identifier 를 바꾸는 것으로 실현할 수 있습니다.

또한 Push 통지를 하는 앱의 경우 Bundle Identifier 매번 인증서가 필요하므로 주의가 필요합니다.
즉, 개발, 스테이징, 프로덕션 연결용 앱을 공존시키고 싶다면, 각각의 서버용의 Bundle Identifier를 만들어, 각각에 다른 Push 증명서를 서버에 배치할 필요가 있습니다.

방법


  • 우선, Configurations를 추가합니다.
  • 그런 다음 Objective-c의 경우 Preprocessor Macros, Swift의 경우 Other Swift Flags를 설정합니다. (Swift의 경우 -D DEBUG 와 같이)
  • Objective-C의 경우는 Preprocessor Macros 를 보고 프로그램상에서 다음과 같이 분기합니다.
  •  #ifdef DEBUG
        // ...
     #elif RELEASE
        // ...
     #else
        // ...
     #endif
    
  • Swift의 경우 Other Swift Flags 를 보고 프로그램에서 다음과 같이 분기합니다.
  •   #if DEBUG
        // ...
      #elseif RELEASE
        // ...
      #else
        // ...
      #endif
    

    그런 다음 Bundle Identifier 를 변경하면 됩니다.
  • 프로젝트의 General에서 지정하는 것은, debug용을 넣어 둡니다.
    예) ko2ic.sample.dev
  • Build Settings → Packaging → Product Bundle Identifier에서 각 환경별로 변경합니다.
    마찬가지로 제품 이름을 각 환경별로 변경합니다.
    Product Module Name은 모두 같은 이름이어야 합니다. Module 이름이므로 알파벳으로 씁니다.


  • Info.plist 의 Bundle name 을 $(PRODUCT_NAME) 로 한다.
  • 테스트 대상에서 TEST_HOST를 검색하여 각 제품 이름에 맞게 다시 작성합니다. 이것이 다르면 테스트가 작동하지 않습니다.
  • 마지막으로 체계별로 빌드하면 완성입니다.

  • Apns를 사용하는 경우에는 Code Signing Entitlements도 Configuration별로 만듭니다. 그렇지 않으면 ios10 이상에서는 장치 토큰을받을 수 없습니다.

    개발.entitlements
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>aps-environment</key>
        <string>development</string>
    </dict>
    </plist>
    

    스테이징.entitlements
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>aps-environment</key>
        <string>ad-hoc</string>
    </dict>
    </plist>
    

    프로덕션.entitlements
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>aps-environment</key>
        <string>production</string>
    </dict>
    </plist>
    

    좋은 웹페이지 즐겨찾기