Posted at

64bit iOSシミュレータでファイル操作関連でSIGABRTする件の回避方法

More than 5 years have passed since last update.

j2objcに限らずですが、ファイル操作関連のコードで、64bitの実機では動くのに、シミュレータで動かしたときに、以下のようなエラーを吐いて落ちることがあります。


Xcodeエラー内容

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:

stat$INODE64

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:

fstat$INODE64


原因

iOSシミュレータのバグらしいです。64bit用の関数を用意し忘れたようです( ̄▽ ̄;) アップルさんてばうっかりさんね。

つまり回避不能!?

いやいや、広大なネットの海を泳げば、適切なキーワードがあれば、世界の人が教えてくれます。あとは想像の翼を広げて・・・


回避方法

ないなら定義してやればいいじゃない。

てことで、main.mにないと言われた関数を作ってやればOK.


main.m

int stat$INODE64( const char *path, struct stat *sb )

{
return stat( path, sb );
}

int fstat$INODE64( int fd, struct stat *sb )
{
return fstat( fd, sb );
}



参考ページ

https://github.com/google/j2objc/issues/395

http://www.tokoro.me/2012/09/02/ghunit-jenkins-coverage/