簡體   English   中英

Xcode 12 模擬器的構建目標順序錯誤?

[英]Xcode 12 build target in wrong order for simulator?

我的項目始終在使用 Xcode 11 的所有設備上正確運行,但在我安裝 Xcode 12 beta 4 后,它無法在模擬器上構建。

I compared the build logs of Xcode 11 and Xcode 12 and it seems in Xcode 12 that my main target is being built before the cocoa pods target, and so the link will fail because the cocoapods library will not be found.

如何修復構建目標的順序?

在 Xcode 11 中,一切都很好。 我自己的目標是在 cocoapods 目標之后構建的。

在此處輸入圖像描述

在 Xcode 12 中,構建出現故障我自己的目標是在 cocoapods 目標之前構建的。

在此處輸入圖像描述

好的,我得到了一個使構建工作的解決方案(這種解決問題的方法不正確,我的更新中添加了正確的修復方法)

1 你需要將Pods項目作為外部項目添加到你的主項目中

2 在您的主項目的構建階段明確添加所有 cocodpods 目標作為依賴項

但我仍然認為 xcode 12 的新測試版可能會解決這個問題。 because it seem a bug of xcode 12 ( my project work perfect in xcode 11 and xcode 12 + ios device, failed in xcode 12 + simulator only)

###2020-08-17 更新###

我找到了重現此問題的更確切原因,似乎我在 xcode 12 中打開的項目文件將在用戶定義中自動生成 VALID_ARCHS 宏,並且此宏會使構建失敗

在此處輸入圖像描述

我發現,使用這個宏,在構建的鏈接過程中,鏈接目標類型將是未知類型' arm64-apple-ios11.0-simulator ',這會導致構建失敗以及所有目標都內置的問題錯誤的順序似乎只會在添加此宏時發生

XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios11.0-simulator 

刪除此 VALID_ARCHS 宏后,鏈接目標類型將為“ x86_64-apple-ios11.0-simulator ”,一切順利

XcodeDefault.xctoolchain/usr/bin/clang -target x86_64-apple-ios11.0-simulator 

####2020-09-11 添加添加 Apple 對此宏的反饋####

更新 Apple 對 VALID_ARCHS 的反饋
  • 在查看您的反饋后,我們為您提供了一些其他信息:

  • Xcode 不會將 VALID_ARCHS 添加到您的項目中。 事實上,我們建議不要使用 VALID_ARCHS。 也許某些 CocoaPod 出於某種原因將其設置在您的項目中? CocoaPods 不是 Xcode 的一部分,所以我們無法控制他們的行為。

    需要注意的一點是,在 Xcode 11 VALID_ARCHS 出現在架構部分下。 由於我們強烈建議不要使用它,它不再顯示在那里,如果它被定義,現在會出現在用戶定義部分中。

  • Xcode 11 用於自動將模擬器的 arm64 構建轉換為 x86_64 構建,但現在 arm64 是有效的模擬器架構(它是 Apple Silicon 架構),不再發生這種轉換。

  • 所以,我們懷疑你應該做的是從你的項目中完全刪除 VALID_ARCHS,並確保架構 (ARCHS) 設置為標准架構 (ARCHS_STANDARD) 而不是特定的東西(除非你真的知道你為什么不使用 ARCHS_STANDARD) .

####反饋結束####

####2020-10-10 已添加####

刪除某些人的 VALID_ARCHS 宏后,構建可能仍然無法正常工作,您可以查看添加的 Apple 反饋的答案和以下@Andrei Herford 的答案:

確保體系結構 (ARCHS) 設置為標准體系結構 (ARCHS_STANDARD)

然后刪除宏,希望這兩個步驟適用於所有人:)

####2020-10-10 添加結束####

通過在架構設置中使用 $( VALID_ARCHS ) 以及在ARCHS中使用$(ARCHS_STANDARD) ,我能夠在模擬器和設備上解決該問題。 我不確定以這種方式改變拱門可能會產生什么副作用,但到目前為止我還沒有遇到任何新問題。

在此處輸入圖像描述

細節:

@ximmyxiao 的出色回答讓我走上了正軌。 但是,他提出的解決方案(刪除 VALID_ARCHS)對我不起作用。 這在編譯Pod 目標時導致了一個新問題( Command PhaseScriptExecution failed with a nonzero exit code ,並且ARCHS[@]: unbound variable in Pods script)。

而是在arm64中用x86_64替換 arm64 解決了為模擬器構建時的問題。 似乎arm64從來都不是一個正確的平台,它被 Xcode 翻譯成 x86。 由於 Apple 已宣布轉向 ARM 處理器,因此這種轉換不再正確,因此必須改用正確的平台x86_64

關於 Apple VALID_ARCHS 不應再使用。 但是,此修復在為設備構建時不起作用。 最終使用$(ARCHS_STANDARD)代替(對於模擬器和設備)在這兩種情況下都可以解決問題。

遇到此類問題的其他人很好看。 與 Xcode 一起工作永遠不會感到無聊......

** 對於 XCode 12.4 **

我有帶有 M1 的 Apple MB Pro 和帶有 Moya POD 的項目以及許多其他項目。 應用程序在具有相同版本的 XCode (12.4) 的舊英特爾 macbook 中完美構建。 但對於 M1,它不會編譯說:“Moya not found”。 什么??

它說:“找不到目標'x86_64-apple-ios-simulator'的模塊'Moya';找到:arm64,arm64-apple-ios-simulator”。

沒有任何建議對我有用。 所以幫助我的是:

  • (不確定是否有必要):通過 pod install 重新安裝所有 pod
  • 清除構建數據
  • 通過 Rosette 啟動(在 XCode 應用程序屬性 cmd+i 中檢查)

在應用程序的項目中:

  • “架構”:添加 x86_64
  • “僅構建活動架構”:是

在“Pods”項目中,沖突的 pod 部分(在我的例子中是 Moya):

  • “僅構建活動架構”:是

然后重建。 可能還需要下一次重建。

對於 Xcode 版本 12.1 如果找不到 VALID_ARCHS 添加 **$(ARCHS_STANDARD) x86_64 i386架構中的所有三個將解決在模擬器和設備上運行、歸檔的問題。 還建議將“僅構建活動架構”添加到“”。 在此處輸入圖像描述

這對我有用。

  1. 從用戶定義的設置中刪除VALID_ARCHS
  2. ARCHS設置為$(ARCHS_STANDARD)
  3. 為我的項目創建了一個新的.xcconfig文件。 (如果你已經有,那么你可以跳過這個)
  4. 將這些添加到我的.xcconfig文件中
EXCLUDED_ARCHS[sdk=iphoneos*] = x86_64 EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

之后,我可以為模擬器和設備構建兩者。 這里的想法是在模擬器上構建時排除 arm64,在設備上構建 x86_64。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM