2016-11-21 35 views
1

我已經連續數週摔跤了。爲什麼下面的macOS安裝程序給出了Alamofire鏈接程序錯誤?在macOS上設置框架命令行應用程序 - 原因:找不到圖像

步驟重新創建鏈接錯誤:

  • 創建新的MacOS命令行應用
  • 運行莢初始化從終端更新
  • 創建以下podfile:

    平臺:OSX,'10 0.10 ' target'testMacOS'do use_frameworks! 莢 'Alamofire', '〜> 4.0' 端

pod install運行。打開並建立工作區

錯誤:dyld的:庫未加載:@是rpath/Alamofire.framework /版本/ A/Alamofire 原因:未找到圖像

AT這一點上,這個錯誤是有意義的。你需要去Target/General/Linked Frameworks和Libraries。然後添加Alamofire。現在Alamofire在工作區的Framework目錄中。

構建並運行。同樣的錯誤。爲什麼?

回答

0

問題:使用xCode 8.1的,我沒有意識到macOS Command Line應用程序不支持框架(動態庫),就像iOS或桌面macOS應用程序使用捆綁軟件一樣。

解決方案:我通過關閉github源代碼並在工作區內編譯它來解決這個問題。這工作。導入靜態庫也起作用。

1

命令行工具確實「支持」框架,但不像應用程序捆綁包那樣。你需要把引用的框架在@rpath這實際上是~/Library/Frameworks//Library/Frameworks/

3

您需要@rpath手動設置,莢「$(ProductDirectory)/ $(FrameworkName)/ $(FrameworkName).framework安裝框架」。

例如,您的Alamofire框架位於「$(ProductDirectory)/Alamofire/Alamofire.framework」。因此,您需要將「@ executable_path/Alamofire /」添加到您自己的目標的Building Settings - Runpath Search Paths。此外,「Pods Project - Alamofire(Target)」還需要指定swift運行時動態庫的位置。在我的環境中,我需要將「/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx」添加到「Building Settings - Runpath Search Paths」中。

但爲了方便起見,您可以看看我的pod post_install代碼。

post_install do |installer| 
    files = Dir.glob("*.xcodeproj") 
    proj_file = files[0] 
    app_project = Xcodeproj::Project.open(proj_file) 

    app_project.native_targets.each do |target| 
     target.build_configurations.each do |config| 
      config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = '$(inherited) @executable_path/../Frameworks @loader_path/Frameworks' 
      prefix = ' @executable_path/' 

      # For each pod, add the framework path to LD_RUNPATH_SEARCH_PATHS 
      installer.pods_project.targets.each do |pod_target| 
       config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = config.build_settings['LD_RUNPATH_SEARCH_PATHS'] + prefix + pod_target.name + '/' 

       pod_target.build_configurations.each do |pod_config| 
#if you want embed swift stdlib into every framework, uncommend 1,2 and commend 3,4 
#1 
#pod_config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'YES' 
#2 
#pod_config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = '$(inherited) @executable_path/../Frameworks @loader_path/Frameworks' 

#3 
pod_config.build_settings['ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES'] = 'NO' 
#4 
pod_config.build_settings['LD_RUNPATH_SEARCH_PATHS'] = '$(inherited) /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/' 
       end 
      end 
     end 
    end 

    app_project.save 
end 
相關問題