2013-07-18 40 views
3

提交iOS應用在App Store時,我收到來自蘋果以下消息非PIE二進制:無論內置的構建設置

非PIE二進制 - 可執行「Celly.app」是不是立場 獨立可執行文件。請確保您的構建設置爲 ,配置爲創建PIE可執行文件。欲瞭解更多信息,請參閱 Technical Q&A QA1788 - Building a Position Independent Executable

的信息在鏈路說我應該做到以下幾點:

在Xcode中,在「目標」選擇你的目標部分,然後點擊 「構建設置「選項卡查看其設置。對於iOS應用程序,將iOS 部署目標設置爲iOS 4.3或更高版本。對於Mac應用程序,請將OS X 部署目標設置爲OS X 10.7或更高版本。驗證生成 位置相關代碼的默認值爲NO。驗證 不創建位置獨立可執行文件的默認值爲 的值爲否。

我跟着在他們提供的鏈接的方向,確保有關生成位置無關的二進制文件的構建設置都設置爲「NO」,並且也驗證了我的項目的iOS部署目標是iOS版5.1 。

我不認爲它會影響最終產品,但我使用Mogenerator創建我的核心數據管理對象。我已經驗證Mogenerator目標也具有正確的設置。

我還通過Cocoapods使用了各種庫,並且驗證了它們各自的設置都是正確的,並且它們都具有iOS 5.1的部署目標。

但是,即使使用這些設置,我的應用仍然是非PIE。我只能假設在項目中隱藏了一些重寫我的構建設置並導致應用程序構建爲位置依賴項的內容。我對PIE的概念非常不熟悉,所以關於可能導致這種情況的任何信息將不勝感激。還有其他地方我應該檢查,可能會影響我的應用程序是否是PIE?我的代碼中是否有可能導致我的應用程序構建非PIE的事情?

+0

據爲http://計算器。com/questions/16455416/non-pie-binary-the-executable-project-name-is-not-a-position-independent-exe你使用的庫也必須是PIE。 – JaakL

+0

@JaakL我已經通過並檢查了我正在使用的所有庫都有適當的PIE設置。但是,我不確定他們是否真的生成了PIE,因爲他們可能會遭受我包含的項目所面臨的相同問題。是否有辦法獨立驗證每個圖書館是否生成PIE?如果我有這個過程,我可以指出我的問題的起源。 – Ziewvater

+0

我現在就得到了這個項目。該項目由第三方開發人員構建,他們使用Unity3d。 「的ARMv7 /裝配-CSHARP-firstpass.dll.o。」出現PIE禁用。這是Unity/C#的東西......或者狗知道:-P – Jonny

回答

0

您可以使用otool檢查每個二進制文件或庫。

轉到框架或應用程序的位置。 e.x./[DerivedData DIR] /編譯/產品/釋放-的iPhoneOS

otool -hv LibraryName.framework /庫名稱

otool -hv AppName.app/AppName

尋找「PIE 「在旗幟部分。下面是示例輸出:

AppName.app/AppName (architecture armv7): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC ARM V7 0x00 EXECUTE 45 4600 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE

AppName.app/AppName (architecture arm64): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 ARM64 ALL 0x00 EXECUTE 45 5184 NOUNDEFS DYLDLINK TWOLEVEL WEAK_DEFINES BINDS_TO_WEAK PIE