コンテンツにスキップ

アップデート

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

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のソースコード修正が必要となる場合があります。


バージョン 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 { ... }