【iOS】【RNCryptor】iOS11以降のSDKでビルドすると、RNCryptorの"int SecRandomCopyBytes~" でエラーが起きる


iOS11未満のSDKでビルドしていたモジュールを、iOS11以降の環境でビルドしようとすると、RNCryptorというライブラリでエラーが起きたため、その時の応急処置をメモしておきます。

対処方法(多分最善ではない応急処置的な)

・原因

RNCryptor.m内のSecRandomCopyBytesを呼び出し時の引数が違う物になっている(バージョンアップによって?)

★参考
https://github.com/RNCryptor/RNCryptor-objc/issues/17
https://github.com/RNCryptor/RNCryptor/issues/248

・コードを以下のように修正

● 修正前

extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) **attribute**((weak_import));

○ 修正後

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, void *bytes) __attribute__((weak_import));
#else
extern int SecRandomCopyBytes(SecRandomRef rnd, size_t count, uint8_t *bytes) __attribute__((weak_import));
#endif

さいごに

この事象に陥ったのは、iOS保守の案件での出来事でしたが、外部ライブラリを修正するのは正直微妙な気がしてます(gitの管理対象ファイルにも外しているので、また期間が経ってアップデートを余儀なくされたとき、私以外の違う人が保守対応していたら同じところで詰まりそう)
最善の対応は使用言語をObjective-CからSwiftに変更しつつ、ライブラリをSwift版の最新に変える、とかだと思います。(調べきれていませんが、今使っているObjective-C版のライブラリはサポート終了してしまったのかもしれませんね)