近日一名開發(fā)者在博客分享了自己提交應(yīng)用(基于Electron 7開發(fā)的App)到Mac App Store的經(jīng)歷。
Electron是一個(gè)跨平臺(tái)桌面應(yīng)用開發(fā)工具,支持使用JavaScript, HTML和CSS等Web技術(shù)開發(fā)桌面應(yīng)用。知名開源項(xiàng)目諸如GitHub打造的Atom編輯器和微軟打造的Visual StudioCode編輯器均使用Electron開發(fā)。
由于此應(yīng)用不是采用原生開發(fā)的應(yīng)用,所以這位開發(fā)者為了能成功將應(yīng)用提交并通過Mac App Store的審核,他根據(jù)網(wǎng)絡(luò)上的教程采用了Electron-Packager對(duì)應(yīng)用進(jìn)行打包。
不過開發(fā)者在按照教程操作后,卻發(fā)現(xiàn)蘋果的審核回復(fù)稱無法打開所提交的文件。他判斷是審核者無法打開來自elektro編輯器的文件(elektro是開發(fā)者提交的應(yīng)用),因?yàn)樗麤]有添加用戶讀取和寫入的權(quán)限。經(jīng)過以下的調(diào)整后,他再次提交了應(yīng)用。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
- <plist version="1.0">
- <dict>
- <key>com.apple.security.app-sandbox</key>
- <true/>
- <!-- Add entitlements here -->
- <key>com.apple.security.cs.allow-jit</key>
- <true/>
- <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
- <true/>
- <key>com.apple.security.cs.allow-dyld-environment-variables</key>
- <true/>
- <key>com.apple.security.files.user-selected.read-write</key>
- <true/>
- </dict>
- </plist>
然而經(jīng)過調(diào)整后再次提交依舊沒有通過審核。對(duì)此,開發(fā)者表示一臉茫然。接著,他又提交了一款基于Electron名為trommel的應(yīng)用。結(jié)果又是意料之中被拒絕了,不過這次卻意外地收到了不同于之前的原因:
可以看到,蘋果之拒絕這款應(yīng)用是因?yàn)樗褂昧怂接锌蚣?non-public framework)。作者不是唯一一名遇到此問題的人,于是他向蘋果反饋?zhàn)约耗壳罢谑褂肊lectron開發(fā)應(yīng)用,但不能更改任何這些私有框架的用法。
蘋果對(duì)此的回應(yīng)是,當(dāng)提交的應(yīng)用使用或引用了私有API就會(huì)被拒絕。如果開發(fā)者無權(quán)訪問二進(jìn)制文件或不確定如何刪除有問題的API,請(qǐng)與服務(wù)提供商聯(lián)系以獲取技術(shù)支持。重點(diǎn)來了,被拒絕后,如果后面繼續(xù)提交此應(yīng)用時(shí)出現(xiàn)使用或隱藏私有API的情況,可能會(huì)導(dǎo)致Apple Developer帳戶被禁用,并從App Store中刪除所有關(guān)聯(lián)的應(yīng)用程序。
而這位開發(fā)者目前面臨的情況是:由于調(diào)用這些API屬于Electron框架的行為,并非應(yīng)用執(zhí)行的,而且Electron框架使用這些API已經(jīng)有好幾年了。但由于近期蘋果更新了服務(wù)端的應(yīng)用審核流程,能檢測和識(shí)別出這些違反其應(yīng)用審核規(guī)定的私有API,最后導(dǎo)致開發(fā)者的應(yīng)用無法通過審核。
蘋果的這次舉動(dòng)不禁讓人回想起當(dāng)年對(duì)一些使用熱更新框架的應(yīng)用的“警告”。
當(dāng)時(shí)蘋果向所有開發(fā)者推送警告郵件,宣布未來將禁用APP內(nèi)部的“動(dòng)態(tài)分發(fā)”功能,并要求開發(fā)者在自家APP中刪除JSPatch相關(guān)框架,否則APP將面臨下架或禁止上架。
結(jié)合此次的事件來看,其實(shí)這一切都十分符合蘋果的一貫作風(fēng)——讓所有事情可控、保證安全。開發(fā)者能用什么不能用什么都盡量在自己的控制范圍內(nèi)。大多數(shù)開發(fā)者使用熱更新框架修復(fù)bug,或者弄一些臨時(shí)的小功能配置,這些沒有問題,但總會(huì)有少數(shù)開發(fā)者借此去調(diào)用私有API以實(shí)現(xiàn)某些不當(dāng)企圖,這正是蘋果不可控的。
因此在此次事件中,我們也就不難理解蘋果為何會(huì)嚴(yán)厲禁止調(diào)用私有API的應(yīng)用。