akiyoko blog

akiyoko の IT技術系ブログです

ひさびさに iOSアプリのバイナリをビルドしたら、コンパイルエラー「Assignment to Objective-C's isa is deprecated in favor of object_setClass()」が出て困った件

前回「iOSアプリを App Store にバージョンアップ申請するときの手順メモ」のときに iOSアプリのバージョンアップ申請をしてから約3ヶ月、ある不具合の対応をするために、Xcode で Distribution用のバイナリをビルドしたのですが、今まで見たことのない次のようなエラーが表示され、バイナリが作成できないという事態に遭遇しました。

Assignment to Objective-C's isa is deprecated in favor of object_setClass()

どうやら「JSONKit.m」のコンパイルに失敗したらしいというのは分かるのですが、原因がさっぱり思い当りません。

環境

これ!

なかなかピンポイントな情報がググれずに途方に暮れていると、某筋から超有力な情報をいただくことができました。

※ビルド時にJSONKit.mで以下のエラーが発生した場合は対応手順を参考にしてください。
JSONKitの利用および改変に関しては、JSONKitのライセンスにご注意ください。


「Assignment to Objective-C's isa is deprecated in favor of object_setClass()」


【対応手順】

  1. ビルド後に左側に表示されるエラーおよび警告のリストのうち上記エラーの項目をクリック
  2. Issueの下に「Fix-it Replace …」で始まる文が表示されていることを確認してEnterキーを押下するとXcodeが自動で修正
  3. 上記エラー全てに同じ処理を実施

http://mb.cloud.nifty.com/doc/quickstart_ios.htm


対応方法

今回は、この手順で対応しました。


「Assignment to Objective-C's isa ・・・」とのエラーをダブルクリック。
f:id:akiyoko:20140315020507p:plain


コンパイルエラーの箇所が開くので、あらためて「Assignment to Objective-C's isa ・・・」をダブルクリックして、
f:id:akiyoko:20140315020514p:plain


「Fix-it ・・・」が表示されたら、Enterキーでコードを修正します。
f:id:akiyoko:20140315020521p:plain



全てのエラーに適用して、Distribution用のバイナリを再ビルドすると、問題なく作成することができるようになりました。

それにしても、バージョンアップ時はいつも想定外の問題に悩まされます。。