iOS 工程 相容64位 容易遇到的問題

2021-07-22 12:15:04 字數 1543 閱讀 4134

tips:

正文:

好在大部分用來打包.a檔案的原始檔都在gitlab上,我還能找到,這算是不幸中的萬幸

1、aes替換,無問題

2、asi替換,在」target」->」build phases」->」compile source」中所有asi 檔案的compile flags 設定」-fno-objc-arc」 相容arc

3、jsonkit替換,同2、

4、ziparchive替換,同2、

error1:

當到這裡的時候,編譯發現乙個錯誤」implicit declaration of function 『nsfiletypeforhfstypecode』 is invalid in c99」,

這是fmdb的問題,fmdatabaseadditions.m中存在如下一段**:我們需要在**的外面做預編譯處理

#if target_os_mac && !target_os_iphone // 新增預編譯處理

assert([s length] == 6);

s = [s substringwithrange:nsmakerange(1, 4)];

return s;

} fmresultset *rs = [self executequery:query];

[rs next];

[rs close];

} if ([s length] != 4)

}#endif // 結束

5、sqlcipher替換,重新配置了乙個,詳情見

error 2:

這個時候又出現了另乙個問題crash:

nsinvalidargumentexception -[__nstaggedpointerstring unsignedlonglongvalue]: unrecognized selector sent to instance
定位到實體中的字典轉模型方法中:

- (instancetype)initwithdictionary:(nsdictionary *)dictionary

else if (![obj isequal:[nsnull null]])

}];} return self;

}

這個問題,是因為64bit中,nsstring 中沒有unsignedlonglongvalue這個方法了, 而當字典中obj的型別是nsstring型別,實體中的key對應的屬性是nsuinteger型別,setvalue:obj forkey:key 會自動做如下處理:

[obj unsignedlonglongvalue] 將value轉為對應的屬性型別,這就導致64bit中找不到該方法而crash。我的解決是,對nsstring寫乙個category,重新寫乙個unsignedlonglongvalue的方法:

-(nsuinteger)unsignedlonglongvalue
或者 避免 讓系統做nsstring->nsuinteger的型別裝換

帶指標的通訊結構體32位與64位相容

最近做乙個移植專案,將32位上的vpn移植到64位環境上。由於當初設計未考慮可移植性,導致移植時出現了很多的問題,其中最典型的乙個問題就是通訊結構帶指標的問題。場景分析 如下的兩個結構體,其中b在通訊時做通訊結構使用 cpp view plain copy print?struct a struct...

iOS應用如何實現64位的支援

關於指令集如下參考 armv8 arm64 iphone 6 plus iphone 5s,ipad air 2 retina ipad mini 2,3 armv7s iphone 5,iphone 5c,ipad 4 armv7 iphone 3gs,iphone 4,iphone 4s,ipo...

iOS應用如何實現64位的支援

關於指令集如下參考 armv8 arm64 iphone 6 plus iphone 5s,ipad air 2 retina ipad mini 2,3 armv7s iphone 5,iphone 5c,ipad 4 armv7 iphone 3gs,iphone 4,iphone 4s,ipo...