きりかノート 3冊め

おあそびプログラミング

RubyCocoa 今日のコミット 2015-06-12

新しいOS Xのbetaが出たので検証中、っていうかSEGVしてテスト走らないじゃん。。

だいたいこういうレベルでおかしいときは、コンパイル時に警告出てたりするものなので確認。

   In file included from /Users/kimuraw/proj/rubycocoa/framework/src/objc/OverrideMixin.m:13:
   In file included from /Users/kimuraw/proj/rubycocoa/framework/src/objc/OverrideMixin.h:10:
   In file included from /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/objc/objc-class.h:1:
   /Applications/Xcode-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/objc/runtime.h:56:11: note: 'isa' has been explicitly marked deprecated here
       Class isa  OBJC_ISA_AVAILABILITY;
             ^
   /Users/kimuraw/proj/rubycocoa/framework/src/objc/OverrideMixin.m:492:22: warning: 'isa' is deprecated [-Wdeprecated-declarations]
     class_addMethod(c->isa, @selector(alloc), (IMP)imp_c_alloc, "@4@4:8");
                        ^

たぶんこれだね。クラッシュレポートもinit_ovmix() -> class_addMethod()のあたりで落ちてるし。クラスのメタクラスを取るのにisa直接見てるけど、だいぶ前にdeprecateされた方法。

objcでメタクラスを取る方法は

  • objc_getMetaClass()にクラス名を渡す。
  • object_getClass()にクラス(Class)を渡す。(ふつうのオブジェクトを渡すとそのクラスが得られる)

のどちらかで、今回はClassはもう用意してあるので後者のほうがよいね。ということで直した。

まあまだOS X 10.11上でぜんぶのテストは通らないんだけどね!

あとテスト流すと次のようなメッセージがでるので対処しといた。outletへのsetterがないから繋げないぜ、とのこと。

   2015-06-12 01:51:36.174 ruby2.2[1285:2455542] Failed to connect (tableView2) outlet from (TableViewNibOwner) to (NSScrollView): missing setter or instance variable

単に警告の出てたoutletに対してib_outletで宣言するようにした。

  • テスト時の"Failed to connect..."が出ないように。(c8fa6b2