那些非public的api如下:
firstresponder
uitouch._locationinwindow
uitouch._phase
uitouch._previouslocationinwindow
uitouch._tapcount
uitouch._timestamp
uitouch._touchflags
uitouch._view
uitouch._window
我想three20 使用這些api主要是為了省事,比如firstresponder,而uitouch的這些屬性也主要是在debug的時候才用到。因此拿掉以上這些private api是比較安全的,關鍵就是如何找到這些api的位置。
解決此問題的方法有兩個:
有乙個熱心的開發者(uprise78 ),在爆出此問題後,根據郵件列表中的討論以及自己的研究,在github上做了乙個fork(three20-p31 ),移除了以上所有的private api,所以只需更新此fork即可。
1.發生問題後,作者本人做了一次修改,移除部分private api
2.作者本人並沒有完全移除那些private api,uprise78 在作者的基礎上又做了一次完整修改,
看起來經過這次修改後,基本解決了此問題。
也就是說只要參考作者及uprise78 的兩次修改,就能完整移除所有的private api使用。於是我上github上尋找three20 的修改歷史,發現他們兩的修改分別如下:
2009-10-28 作則修改:
commit 8183ae25528bbc575ab41a41227756f06c166240
tree 2b2fd7b49fc71755d675eb0fd85c82098da563a5
parent e8ecb801ca70ba824846928b7ca75faf376aeedb
2009-10-31 uprise78 修改:
commit 2c03d2b98ddb287ba68ddb628c4a72588bbee79e
tree cc3cbfe0b23468d876166881f028a576f4ddcc7b
parent 8183ae25528bbc575ab41a41227756f06c166240
commit 3a1f0a9bea92aed27f12a513e1e70c5412ba0f91
tree 0da7dba956f71ca57a029dc3a7c88448e76f9942
parent 2c03d2b98ddb287ba68ddb628c4a72588bbee79e
在github上比對以上修改後,就能完整移除private api了。
以上所謂移除private api,均是使用#ifdef debug將之包裹,所以要注意以下兩點:
1.程式中不能有#define debug
2.在build時,不能在preprocessor marco設定debug
目前方法一已經被證明是可行的,見郵件列表中的討論:***p31 fork fixes rejections***
希望上面的資訊能幫助使用three20的iphone開發者!
2009-12-08更新:
Xcode4匯入Three20開源庫
xcode4匯入three20開源庫 2 新建乙個xcode4工程,名為hellothree20,工程的結構如下 如果這個工程是開啟的,請把它關閉。免得匯入three20後,xcode會出現工程已經被修改的提示。3 在terminal中使用命令,匯入three20 cd到three20的解壓目錄,有...
XCode4配置three20,自己記錄下
2。在解壓目錄下src three20下的three20.xcodeproj拖到自己的工程裡,在彈出的對話方塊中destination欄 copy items into destination group s folder 不要選中,addto targets欄中選中自己的工程target,並不是u...
OS教程 iOS開源專案Three20介紹
from 做ios開發的朋友,如果你沒有用過three20,那有點out了 如果你沒有聽過three20,那可能是還沒有踏入門來!言重了,sorry,下面簡單介紹一下three20這個牛x的開源專案。three20,這是facebook開源出來的乙個ios專案,它可以幫助我們快速的開發ios應用。今...