2

私たちのqtwebkitベースのアプリケーションは、macappstoreに送信された後にアップルによって拒否されました。拒否される理由の1つは、非公開APIの使用です。qtwebkitのソースコードでそのうちの6つを見つけました。しかし、私には残りを見つける場所がありません。アプリケーションのソースコードとQTのソースコード全体を検索しました。

qtwebkitソースで見つけた6つの非公開APIは次のとおりです。

CFHTTPCookieStorageSetCookieAcceptPolicy
CFURLCacheCopyResponseForRequest
CFURLResponseGetMIMEType
CFURLResponseCopySuggestedFilename
CFURLCacheSetMemoryCapacity
CFURLCacheSetDiskCapacity

アップルによって発見された違反の完全なリストは次のとおりです。

非公開APIを使用すると、これらのAPIが将来変更された場合にユーザーエクスペリエンスが低下する可能性があるため、許可されていません。次の非公開APIがアプリケーションに含まれています。

NSAccessibilityCreateAXUIElementRef NSAccessibilityHandleFocusChanged NSAccessibilityUnregisterUniqueIdForUIElement NSAppKitPropertyCreator NSCarbonWindowPropertyTag NSMouseMovedNotification _NSDrawCarbonThemeBezel _NSDrawCarbonThemeListBox _NSPopUpCarbonMenu3 _NXShowKeyAndMain from the framework:'/System/Library/Frameworks

AXTextMarkerCreate AXTextMarkerGetBytePtr AXTextMarkerGetLength AXTextMarkerGetTypeID AXTextMarkerRangeCopyEndMarker AXTextMarkerRangeCopyStartMarker AXTextMarkerRangeCreate AXTextMarkerRangeGetTypeID CTLineCreateWithUniCharProvider CoreDragGetCurrentDrag CoreDragSetImage from the framework:'/System/Library/Frame

フレームワークからのGetNativeWindowFromWindowRefTSMGetInputSourceProperty:'/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon'

CFReadStreamSignalEvent _CFAppVersionCheckLessThan _CFBundleSetDefaultLocalization _CFStringGetUserDefaultEncodingフレームワークから:'/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation'

CFHTTPCookieStorageCopyCookiesForURL CFHTTPCookieStorageDeleteCookie CFHTTPCookieStorageGetCookieAcceptPolicy CFHTTPCookieStorageSetCookieAcceptPolicy CFHTTPCookieStorageSetCookies CFURLCacheCopyResponseForRequest CFURLCacheSetDiskCapacity CFURLCacheSetMemoryCapacity CFURLRequestCreateMutableCopy CFURLResponseCopySuggestedFilename CFURLResponseGetExpectedContentLength CFURLResponseGetHTTPResponse CFURLResponseGetMIMEType CFURLResponseGetURL CFURLResponseSetExpectedContentLength CFURLResponseSetMIMEType _CFNetworkHTTPConnectionCacheGetLimit _CFNetworkHTTPConnectionCacheSetLimit _CFURLCacheCopyCacheDirectory _CFURLRequestCreateArchiveList _CFURLRequestCreateFromArchiveList _CFURLResponseCreateArchiveList _CFURLResponseCreateFromArchiveList _CFURLResponseGetSSLCertificateContext _LSGetCurrentApplicationASN_LSSetApplicationInformationItem _kLSDisplayNameKey kCFStreamPropertyCONNECTAdditionalHeaders kCFStreamPropertyCONNECTProxy kCFStreamPropertyCONNECTProxyHost kCFStreamPropertyCONNECTProxyPort kCFStreamPropertyCONNECTResponse kCFURLResponseExpectedContentLengthフレームワークから不明:'/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices'

フレームワークからのNSPopAutoreleasePoolNSPushAutoreleasePool:'/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation'

CARenderCGDestroy CARenderCGNew CARenderCGRender CARenderNotificationAddObserver CARenderNotificationRemoveObserver CARenderServerGetPort CARenderServerStart CARenderUpdateAddContext CARenderUpdateAddRect CARenderUpdateBegin CARenderUpdateFinish kCAContextPortNumber from the framework:'/System/Library/Frameworks/QuartzCore.framework/Version

ソースコードで上記のAPIと同じ名前のメソッドを定義している場合は、メソッド名を変更して、アプリケーションが将来の送信でフラグが立てられないように、AppleのプライベートAPIと衝突しないようにすることをお勧めします。

さらに、上記のAPIの1つ以上が、アプリケーションに含まれているライブラリに存在する場合があります。ライブラリのソースにアクセスできない場合は、「strings」または「otool」コマンドラインツールを使用して、コンパイルされたバイナリを検索できる場合があります。「文字列」ツールはライブラリが呼び出すメソッドのリストを出力でき、「otool-ov」はObjective-Cクラス構造とそれらの定義されたメソッドを出力します。これらの手法は、問題のあるコードが存在する場所を絞り込むのに役立ちます。

4

1 に答える 1

2

私は最終的に、これらのいわゆるプライベート API が呼び出される場所までたどり着きました。それらは webkit 内から呼び出されます。webkit は、コンパイルされた静的ライブラリ + ヘッダー ファイルの形式で Apple から直接提供される webkit システム インターフェイス ライブラリを使用します。具体的には、パス src\3rdparty\webkit\WebKitLibraries の下にある 4 つのファイルです。

libWebKitSystemInterfaceLeopard.a libWebKitSystemInterfaceLion.a libWebKitSystemInterfaceMountainLion.a libWebKitSystemInterfaceSnowLeopard.a

私はいつもそれが本当にプライベート API なのか疑問に思っていましたが、ドキュメントなしでそれを呼び出す方法を他に誰が知っているでしょうか? 今ではリンゴそのものであることが判明しました。nokia も digia もこれらのライブラリのソース コードを持っていないため、おそらく何もできません。

作成されたライブラリからのプライベート API アクセスが原因で、qtwebkit ベースのアプリが Apple によって拒否されるのは皮肉なことではありませんか?

私が間違っているか、何かが欠けている場合は、私を修正してください。私が間違っていることを本当に願っています。

于 2013-01-14T04:55:54.793 に答える