2015-11-27 86 views
0

我有一個帶有兩個可執行目標的XCode項目,我用它來做我自己的工作(也就是,我不銷售或發佈應用程序,但它們對我仍然很重要),這取決於一個外部項目。到目前爲止,構建應用程序並安裝到/ Applications文件夾一直沒有問題。我所做的,就是進入命令行,然後鍵入:xcodebuild沒有安裝到應用程序文件夾中

sudo xcodebuild -scheme Trainer install 

這將安裝目標訓練到應用程序文件夾和應用程序可以從那裏運行。如果我嘗試使用-target Trainer來指定目標,它將無法工作,因爲它在外部項目中找不到依賴關係。無論如何,因爲它最後一次工作,兩件事情發生:

  • 我已經升級到OS X 10.11
  • 我已經升級到了XCode 7.1.1版本(7B1005)

不管是什麼原因,xcodebuild不再將構建的產品安裝到/ Applications文件夾中。從生成日誌的最後幾行,現在用xcodebuild聯編時,建設有:

Touch /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/BuildProductsPath/Release/Trainer.app.dSYM 
cd /Users/pbholmen/Projects/SoundSample 
/usr/bin/touch -c /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/BuildProductsPath/Release/Trainer.app.dSYM 

RegisterWithLaunchServices /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/InstallationBuildProductsLocation/Applications/Trainer.app 
cd /Users/pbholmen/Projects/SoundSample 
builtin-lsRegisterURL /var/root/Library/Developer/Xcode/DerivedData/SoundSample-bvsqlgnuhfmtjkgkhevztdzbjbie/Build/Intermediates/ArchiveIntermediates/Trainer/InstallationBuildProductsLocation/Applications/Trainer.app 

** INSTALL SUCCEEDED ** 

我試圖簡單地複製Trainer.app,它建立在/ Applications文件夾,但如果我上雙擊它,它只是不會運行。當然,應用程序在XCode內部構建和運行時都可以工作,並且都具有「Debug」和「Release」配置。

回來時,它的工作,這將是生成日誌的最後幾行(在終端中):

Touch build/Release/Trainer.app.dSYM 
cd /Users/pbholmen/Projects/SoundSample 
/usr/bin/touch -c /Users/pbholmen/Projects/SoundSample/build/Release/SoundSample.app.dSYM 

RegisterWithLaunchServices /Applications/Trainer.app 
cd /Users/pbholmen/Projects/SoundSample 
builtin-lsRegisterURL /Applications/Trainer.app 

** INSTALL SUCCEEDED ** 

如果我試圖進入從在Xcode中生成日誌,找到它放在Finder中構建並操縱該位置,然後從XCode外部啓動應用程序,這也不起作用。

在這裏你可以看到我的部署構建設置目標:

Build settings

在「部署位置」我曾經嘗試都「YES」和「NO」,和「OS X部署目標」下我已經嘗試了「OS X 10.10」和「OS X 10.11」。以及這兩者的所有四種組合。

+0

如何使用'archive'並從那裏安裝它? – trojanfoe

+0

謝謝。我已經嘗試過了,並且它沒有用於工作,但是在設置了我的目標所依賴的框架的部署位置之後,現在就可以工作了,該框架位於不同的項目中。 所以,我現在可以安裝它,但我希望有一種方法可以通過命令行(它更快)來完成,所以我會繼續打開我的問題。 – Balthazar

+0

如果你想管理Xcode項目依賴關係,那麼它聽起來像你需要創建一個Xcode工作區並構建它。 – trojanfoe

回答

1

經過數小時的徘徊,我終於找出答案。首先,命令

sudo xcodebuild -scheme Trainer install 

是錯誤的。這是一種解決方法,因爲我無法讓XCode從命令行管理我的外部依賴項,即使它們在XCode中正確管理。正確的調用,比該項目的主要目標以外的目標是

sudo xcodebuild -target Trainer install 

此前,第一次調用會的工作,即使該方案不的產品將被安裝確實包括「安裝」的行動。 XCode 7.1顯然不再這樣。我以前不能使用-target而不是-scheme的原因是因爲我的目標依賴於另一個項目中的框架,該項目已添加到我的主項目(添加了外部項目,而不僅僅是框架)。所有依賴關係都在我的主項目中正確設置,並且僅在指定方案時才起作用,而不是在指定目標時起作用。當運行指定了-target的xcodebuild時,xcodebuild不會在外部項目中找到模塊(Swift框架)。

我現在已經找出了原因。包含外部框架的項目沒有正確設置。它被設置爲將框架安裝到一個虛假的位置(/tmp/ProjectName.dst/Library/Frameworks,這是默認的)。另外,我的主要項目需要將/ Library/Frameworks添加到框架搜索路徑中。看起來,當項目是在XCode內部構建,或者用於存檔等時,庫和可執行文件被構建到與系統本身分離的「私人」文件夾結構中。然而,在運行xcodebuild install時,它會嘗試將外部框架安裝到適當的系統文件夾中,並將其鏈接到那裏。因此,運行'xcodebuild'時,在XCode內部工作的設置可能不起作用。

編輯︰它現在的作品,但StackOverflow不會讓我把它標記爲正確的前兩天。

+0

即使您已將「安裝構建產品位置」設置爲「/」,我也可以確認Xcode 8.2.1中的方案和目標之間的行爲仍然相同。 – mz2

相關問題