コンテンツにスキップ

アップデート

引き継ぐ必要のある項目を確認する

SDKをダウンロードしてプロジェクトに上書きする際に既存の設定内容を予め一時ファイルに退避させておく必要があります。

ダウンロード後に編集されている可能性が高いファイルは以下の通りです。

  • PopinfoConfiguration.m
  • SdkSettings.plist
  • Settings.bundle/Root.plist
  • PopinfoViewConfiguration.m
  • PopinfoListViewController.m
  • PopinfoDetailViewController.m

上書き後に引き継ぐ必要のある項目について一時ファイルからコピーしてください。


参照パスを確認する

旧SDKとは別の場所に新SDKを組み込む場合には参照パスを更新する必要があります。

プロジェクトの TARGETS > Build Settings にある、Search Paths > Library Search Paths を更新してください。


CoreDataバージョンを確認する

現在の最新バージョンは 5.0 です。

CoreDataモデルバージョンは常に最新バージョンを指定してください。

バージョンが適切に設定されていない場合、アプリが異常終了することがあります。

バージョンの確認方法

Xcode 上で PopinfoReceiver.xcdatamodeld をクリックすると、画面右側「Core Data Model > Model Version」の「Current」にバージョンが表示されます(下図参照)。
coredata_version.png


SDK更新後のアプリの動作を確認する

SDKの更新を行った際は旧アプリからのバージョンアップを想定したテストを行うなど、必要な動作確認をお願いします。


後方互換性のないアップデートについて

特定のSDKバージョンは、後方互換性のないアップデートを含むため、アップデート時にAppのソースコード修正が必要となる場合があります。


バージョン 12.0.0 へのアップデートについて

  1. 必須フレームワークに NetworkExtension.framework が追加されました。
    Wi-Fi配信に必要なSSID/BSSIDの取得のために利用されます。
    必須フレームワークを追加する をご確認の上、追加してください。

  2. Core Data Model の Tools Version について
    Xcode 3.2 から Automatic(Xcode 15.0) に変更されました。
    アップデート後、下図のようにバージョン変更をお願いします。

    バージョンの確認方法

    Xcode 上で PopinfoReceiver.xcdatamodeld をクリックすると、画面右側「Core Data Model > Tools Version」の「Minimum」にバージョンが表示されます(下図参照)。
    coredata_tools_version.png

  3. Swift Concurrencyに対応しました

    • async/awaitで呼び出せるメソッドを追加しました。
      従来のメソッドについては deprecated 指定となりました。deprecated 指定されたメソッドは、時期は未定ですが、将来的に削除される可能性があります。
    • SDK内部で定義されたクラスやデリゲートメソッドについて、NS_SWIFT_UI_ACTOR, NS_SWIFT_SENDABLE, NS_SWIFT_NONISOLATED を付与しました。
  4. SwiftConcurrency対応により、以下のメソッドについてラベル名を変更しました。

    /// PrivacyControlする場合、ユーザーからの許諾状態を保存するために利用する。
    [変更前]
    + (void)setPrivacyControlStatus:(PopinfoPrivacyControlStatus)status success:(void (^_Nullable)(BOOL success))callback;
    [変更後]
    + (void)setPrivacyControlStatus:(PopinfoPrivacyControlStatus)status completion:(void (^_Nullable)(BOOL success))callback;
    

バージョン 10.0.1 へのアップデートについて

  1. PopinfoConfiguration.m の一部設定項目が変更になりました。
    popinfoApplicationBadgeClearUseYES の時、アプリがアクティブになるタイミングでアプリアイコンのバッジクリア、および通知センターの通知クリアする処理が実行されていましたが、popinfoRemoveAllDeliveredNotificationsUse を新たに追加して、それぞれの処理を個別に制御できるよう変更されました。今回の変更は全てのiOSバージョンについて適用されます。

    設定項目 詳細 初期値
    popinfoApplicationBadgeClearUse アプリがアクティブになるタイミングでアプリアイコンのバッジをクリアするか否か YES
    popinfoRemoveAllDeliveredNotificationsUse アプリがアクティブになるタイミングで通知センターの通知をクリアするか否か YES

    今回の変更に伴い、下記の バージョン 10.0.0 へのアップデートについて で案内されている、組み込み側での通知センターの通知クリアを実行するための実装は不要となります。

バージョン 10.0.0 へのアップデートについて

  1. PopinfoConfiguration.m の一部設定項目が変更になりました。
    popinfoApplicationBadgeClearUseYES の時、アプリがアクティブになるタイミングでアプリアイコンのバッジクリア、および通知センターの通知クリアする処理が実行されていましたが、今回のアップデートにより、iOS 16.0以上の場合、アプリアイコンのバッジクリアのみ実行されるよう変更されました。iOS 16.0未満では変更ありません。

    組み込み側で引き続き通知センターの通知クリアを実行したい場合、以下の実装が必要となります。

    func applicationDidBecomeActive(_ application: UIApplication) {
        if #available(iOS 16.0, *) {
            // 通知センターの通知クリア
            UNUserNotificationCenter.current().removeAllDeliveredNotifications()
        }
    }
    
    func sceneDidBecomeActive(_ scene: UIScene) {
        if #available(iOS 16.0, *) {
            // 通知センターの通知クリア
            UNUserNotificationCenter.current().removeAllDeliveredNotifications()
        }
    }
    

バージョン 9.0.0 へのアップデートについて

  1. libPopinfoReceiverLib.a を削除して libPopinfoReceiverLib.xcframework を追加してください。
    CPUアーキテクチャの多様化に伴い、XCFrameworkを導入しました。
    プロジェクトの TARGETS > General にある、Frameworks, Libraries, and Embedded Content からlibPopinfoReceiverLib.aを削除して、代わりにlibPopinfoReceiver.xcframeworkを追加してください。Embedの指定はDo not Embedを指定してください。

  2. Xcode 14からbitcodeがdepreatedになりました。(Xcode 14 Release Notes

    Starting with Xcode 14, bitcode is no longer required for watchOS and tvOS applications, and the App Store no longer accepts bitcode submissions from Xcode 14.

    Xcode no longer builds bitcode by default and generates a warning message if a project explicitly enables bitcode: “Building with bitcode is deprecated. Please update your project and/or target settings to disable bitcode.” The capability to build with bitcode will be removed in a future Xcode release. IPAs that contain bitcode will have the bitcode stripped before being submitted to the App Store. Debug symbols for past bitcode submissions remain available for download. (86118779)

    これに伴いFANSHIP SDKでは、 Build Settings > Build Options > Enable Bitcode を NO とする修正を行いました。
    プロジェクト側でBitcodeを有効化している場合、ビルドエラーが発生する可能性がありますのでご注意ください。

  3. お知らせ詳細画面のレイアウト処理が修正されました。
    PopinfoDetailViewController.mを更新する際は、新旧の差分をよく確認してから更新してください。変更点は以下の通りです。

    ・画面回転時の処理(reloadMyViews)を呼び出すタイミングを変更しました
    ・iOS12未満向けの処理を削除しました

バージョン 8.0.2 へのアップデートについて

  1. お知らせ一覧画面からお知らせ詳細画面への遷移処理ロジックの一部が変更されました。
    お知らせID(piId)及びメッセージID(messageId)へ代入される値がInt32型の上限値を超えることによる修正となります。

    変更前(PopinfoListViewController.m

    detailVC.messageId = [selectedMessage.piId intValue];
    

    変更後(PopinfoListViewController.m

    detailVC.messageId = selectedMessage.piId.integerValue;
    

    お知らせ一覧画面、お知らせ詳細画面をカスタマイズされていて、かつ上の変数をInt32型へキャストされている場合は、Int64型に解釈されるキャスト方法へ変更をお願いします。

  2. CoreDataモデルバージョンについて
    4.2から5.0に変更されました。
    5.0が選択肢に出てこなかった場合、最新のPopinfoReceiver.xcdatamodeldをプロジェクトが参照できていない可能性があります。
    プロジェクト内のPopinfoReceiver.xcdatamodeldを一旦削除して、再度同ファイルを追加してください。

  3. 32bit端末をサポートしている場合
    iPhone5, iPhone5Cなどの32bit端末では、以下のデリゲートメソッドで返されるmessageId: Intが負数となります。
    該当する場合は、messageIdを利用する前に下記のメソッドを使って負数を補正してからご利用ください。
    iOS11以上をサポート対象としている場合はインストール可能な端末が64bitの端末のみとなりますので対応は不要となります。

    func popinfoReceiver(_ popinfoReceiver: PopinfoReceiver, didReceivePopinfoMessage messageId: Int, popup: String) {}
    func popinfoReceiver(_ popinfoReceiver: PopinfoReceiver, didReceivePopinfoMessage messageId: Int, popup: String, payload: [AnyHashable : Any]) {}
    func popinfoReceiver(_ popinfoReceiver: PopinfoReceiver, didReceivePopinfoMessage messageId: Int, category: String, result: Bool) {}
    
    - (void)popinfoReceiver:(PopinfoReceiver *_Nonnull)popinfoReceiver didReceivePopinfoMessage:(NSInteger)messageId popup:(NSString *_Nonnull)popup;
    - (void)popinfoReceiver:(PopinfoReceiver *_Nonnull)popinfoReceiver didReceivePopinfoMessage:(NSInteger)messageId popup:(NSString *_Nonnull)popup payload:(NSDictionary *_Nonnull)payload;
    - (void)popinfoReceiver:(PopinfoReceiver *_Nonnull)popinfoReceiver didReceivePopinfoMessage:(NSInteger)messageId category:(NSString *_Nonnull)category result:(BOOL)result;
    

    負数を補正する例
    本来のmessageIdが 3000000000 だった場合、32bit端末ではオーバーフローした結果、負数の -1294967296 が入ってきます。
    -1294967296 を下記のメソッドに渡すと正しい値の 3000000000 が返ってきます。

    // Int32対応、負数であればオーバフローと判断して修復する
    func repairOverflow(negativeNumber: Int) -> Int {
        if negativeNumber >= 0 {
            return negativeNumber
        } else {
            var ret = negativeNumber
            ret += 1 << 32
            return ret
        }
    }
    
    // Int32対応、負数であればオーバフローと判断して修復する
    + (NSNumber *)repairOverflow:(NSNumber *)negativeNumber
    {
        if (negativeNumber.integerValue >= 0) {
            return negativeNumber;
        } else {
            long long ret = negativeNumber.integerValue;
            ret += (long long)1 << 32;
            return @(ret);
        }
    }
    
  4. Xcode13.3.1未満で8.0.2を利用する場合
    8.0.2はXcode13.3.1でビルドされており、Apple clang version 13.1.6 (clang-1316.0.21.2.3)が使われております。
    Xcode13.3.1未満(例としてXcode13.0)をご利用の場合はアーカイブ時に以下のエラーが出ることが確認されております。

    Could not reparse object file in bitcode bundle: 'Invalid bitcode version (Producer: '1316.0.21.2.3_0' Reader: '1300.0.29.3_0')', using libLTO version 'LLVM version 13.0.0, (clang-1300.0.29.3)' for architecture armv7
    

    このエラーは、Build Settings > Build Options > Enable Bitcode を NO とすることで解消することが確認されております。

  5. アプリ側でお知らせID(piId)及びメッセージID(messageId)を取り扱っている場合
    お知らせID(piId)及びメッセージID(messageId)をInt32型へキャストされている場合は、桁あふれが発生して動作に支障をきたす恐れがございます。
    アプリ側の実装をご確認いただき、該当箇所がある場合はInt64型に解釈されるキャスト方法へ、ご変更をお願いします。
    お知らせID(piId)及びメッセージID(messageId)がSDKより連携される個所は主に下記になります。

    • お知らせ一覧画面、およびお知らせ詳細画面
      • PopinfoListViewController
      • PopinfoDetailViewController
    • 各種デリゲートメソッド
      • popinfoReceiver:didReceivePopinfoMessage:popup:payload:
      • popinfoReceiver:didReceivePopinfoMessage:popup:
      • popinfoReceiver:didReceivePopinfoMessage:category:result:
    • PopinfoReceiver クラスの updateMessages メソッド

バージョン 6.2.0 へのアップデートについて

  1. 「アプリ内メッセージ表示直前の校閲」のためのデリゲートが削除されました。
    以下のデリゲートは削除されています

    - (NSString *__nonnull)popinfoEventActionReceiver:(PopinfoEventActionReceiver *__nonnull)popinfoEventActionReceiver copyeditInAppMsgHtmlString:(NSString *__nonnull)htmlString withEvent:(NSString *__nonnull)event categories:(NSArray *__nonnull)categories;
    

    同等の機能を実装する場合は、メッセージの表示可否を判定するデリゲートにてアプリ内メッセージオブジェクトを取得して、これを書き換えた上で再表示します。

    func popinfoEventActionReceiver(_ popinfoEventActionReceiver: PopinfoEventActionReceiver, shouldDisplay inAppMessage: PopinfoInAppMessage, event: String, category: String) -> Bool {
        // 表示しようとしているアプリ内メッセージの情報を任意の方法で保存します
        save(inAppMessage)
        return true
    }
    
    // 保存したアプリ内メッセージを表示します
    PopinfoInAppMessageViewController().displayPopinfo(inAppMessage)
    
  2. 「組み込み側でメッセージの表示可否を判定する」ためのデリゲートは名称が変更されました。
    お手数ですが、下記を参考に変更してください。

    // 変更前(バージョン6.1.0 以前)
    - (BOOL)popinfoEventActionReceiver:(PopinfoEventActionReceiver *__nonnull)popinfoEventActionReceiver
            shouldFireActionByEvent:(NSString *__nonnull)event
                        withCategories:(NSArray *__nonnull)categories;
    
    // 変更後(バージョン6.2.0 以降)
    - (BOOL)popinfoEventActionReceiver:(PopinfoEventActionReceiver *__nonnull)popinfoEventActionReceiver
            shouldDisplayInAppMessage:(PopinfoInAppMessage *__nonnull)inAppMessage
                                event:(NSString *__nonnull)event
                            category:(NSString *__nonnull)category;
    
    // 変更前(バージョン6.1.0 以前)
    func popinfoEventActionReceiver(_ popinfoEventActionReceiver: PopinfoEventActionReceiver, shouldFireActionByEvent event: String, withCategories categories: [String]) -> Bool { ... }
    
    // 変更後(バージョン6.2.0 以降)
    func popinfoEventActionReceiver(_ popinfoEventActionReceiver: PopinfoEventActionReceiver, shouldDisplay inAppMessage: PopinfoInAppMessage, event: String, category: String) -> Bool { ... }