簡體   English   中英

Ionic / Cordova iOS應用程序構建錯誤的應用程序擴展名 - ** ARCHIVE FAILED **

[英]Ionic/Cordova iOS app build error for app with extension - ** ARCHIVE FAILED **

我遇到了使用Cordova / Ionic CLI的App Extensions運行和構建iOS應用程序的問題。 為了使我的應用程序正常工作,我不得不添加幾個App Extensions(CallKit Directory和Intents),我使用XCode做了 - 添加了一個新的Target並在Swift中寫了一些東西。 當我從Xcode進行構建時,一切似乎都在工作,但Cordova CLI似乎無法區分主應用程序表單App Extension。

/<Path_To_The_App>/Bridging-Header.h:28:9: note: in file included from /<Path_To_The_App>/Bridging-Header.h:28:
#import "CallKit-Bridging-Header.h"
        ^
/<Path_To_The_App>/Plugins/my.custom.callkit_plugin_written_in_swift/CallKit-Bridging-Header.h:1:9: error: 'Cordova/CDV.h' file not found
#import <Cordova/CDV.h>
        ^
<unknown>:0: error: failed to import bridging header '/<Path_To_The_App>/Bridging-Header.h'


** ARCHIVE FAILED **

The following build commands failed:
        CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
        CompileSwift normal arm64 /My Call Directory Extension/CallDirectoryHandler.swift
        CompileSwiftSources normal arm64 com.apple.xcode.tools.swift.compiler
        CompileSwift normal arm64 /My Intent Extension/IntentHandler.swift
(4 failures)

似乎腳本試圖在構建擴展時使用來自主應用程序的橋接頭文件,這顯然是用Swift編寫的。 在Xcode中,我為這兩個目標設置了“安裝Objective-C兼容性標題”為“否”,但Cordova CLI並不關心。 也許,在Objective-C中重寫Extensions可以解決這個問題,但我沒有更多的時間來嘗試一種我不擅長的語言。

我曾經有過與擴展相關的另一個構建問題,這些問題是通過向Cordova lib文件中添加一些“ifs”來修復的,但是黑客攻擊從來都不是一個好的解決方案。 谷歌搜索主題沒有任何結果,好像沒有人試圖將應用程序擴展添加到Cordova應用程序。

現在可以分兩步構建:1)將文件從/ www移動到/ platforms / ios / www 2)手動運行Xcode。 那很煩人。

有沒有人知道避免這種情況的好方法而不必破解Cordova腳本?

謝謝。

我花了一些時間學習運行命令輸出,並看到構建過程是使用Xcode命令行工具啟動的:

xcodebuild -xcconfig <Path To My app>/platforms/ios/cordova/build-debug.xcconfig -workspace "<My App Name>.xcworkspace" -scheme "<My App Name>" -configuration "Debug" -destination generic/platform=iOS -archivePath "<My App Name>.xcarchive" archive CONFIGURATION_BUILD_DIR=<Path To My app>/platforms/ios/build/device SHARED_PRECOMPS_DIR=<Path To My app>/platforms/ios/build/sharedpch

該命令的文檔說:

-xcconfig文件名

在構建所有目標時加載在filename中定義的構建設置。 這些設置將覆蓋所有其他設置,包括在命令行上單獨傳遞的設置。

build-debug.xcconfig導入build.xcconfig,由於某種原因,它有“SWIFT_OBJC_BRIDGING_HEADER = $(PROJECT_DIR)/ $(PROJECT_NAME)/Bridging-Header.h”。 顯然,盡管有.xcodeproj設置,但它覆蓋了所有目標的橋接標題。

在platforms / ios / cordova / build.xcconfig中注釋掉這一行后,構建過程按預期運行。

事實證明,在我的案例中,Cordova構建命令使用了錯誤的Xcode版本。

我正在使用Swift 3並在我的計算機上安裝了兩個Xcode:Xcode 7.3.1和Xcode 8.3.3。 我可以使用Xcode 8.3.3應用程序構建我的cordova應用程序沒有問題,但是當執行命令cordova build ios我得到了與你相同的錯誤。 以下是我做的步驟:

  1. $ xcodebuild -version 此步驟為您提供構建時使用的Xcode cordova版本。 就我而言,它返回了Xcode 7.3.1

  2. $ sudo xcode-select -switch [PathToYourXcodeFolder] 切換到您要使用的Xcode版本。

您可能想要檢查當前的Xcode路徑: $ xcode-select -print-path

在我切換到Xcode 8.3.3后,我可以運行cordova build ios而沒有錯誤。 希望這能幫助那些和我有同樣問題的人。

暫無
暫無

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

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