2013-08-05 33 views
14

Tôi đang cố gắng thiết lập một cá thể Jenkins CI cho dự án phát triển ứng dụng của chúng tôi. Tôi có công việc làm việc chạy thử nghiệm logic và ứng dụng bằng cách sử dụng cấu hình Gỡ lỗi nhưng tôi đang cố gắng xây dựng IPA khi tôi gặp lỗi liên kết trong quá trình biên dịch.Lỗi liên kết cố gắng xây dựng ứng dụng bằng Cocoapods bằng xcodebuild trên Jenkins

ld: library not found for -lPods 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Ứng dụng sử dụng Cocoapods và tôi đang tạo bằng plugin Jenkins XCode.

Tôi đã tìm kiếm cho các vấn đề tương tự và thử/kiểm tra một loạt các điều:

  • Tôi đang sử dụng một không gian làm việc.
  • Tôi đang chạy pod install trước bước xcodebuild.
  • Tôi đã kiểm tra rằng kiến ​​trúc trên bản thân dự án, mục tiêu và Pods đều giống nhau - chuẩn (ARMv7, armv7s) - theo đề nghị của this answer
  • tôi đã cố gắng giải pháp khác nhau từ this GitHub thread
  • tôi đã cố gắng khác nhau cài đặt cho nguồn gốc dữ liệu địa điểm theo this answer và những người tương tự
  • Các Podfile định platform :ios, :deployment_target => "6.0"

Tại thời điểm đó tôi đang thua lỗ cho những gì nhiều hơn để thử.

+0

Bạn có chắc là bạn đang biên soạn không gian làm việc chứ không phải dự án? Nếu bạn chưa sử dụng, hãy thử sử dụng Plugin Xcode của Jenkins và chỉ định 'Xcode Workspace File'. Plugin Xcode có thể giúp xóa bỏ mọi sai lầm có thể có khác. Tôi đã có cùng một vấn đề tuần trước, đã dành hàng giờ chỉ để nhận ra tôi đã Jenkins biên dịch dự án Xcode, không phải là không gian làm việc Xcode. Ngoài ra, hãy truy cập trực tiếp vào thực tế của dự án mà Jenkins đang biên dịch, mở nó trong Xcode và xem liệu bạn có thể tự biên dịch nó không - nó cũng sẽ dễ dàng hơn cho bạn để gỡ rối nó thông qua Xcode. – YoCoh

+0

Có, chắc chắn sử dụng không gian làm việc và không phải dự án. Như tôi đã nói, tôi có một cấu hình rất giống với việc chạy thử nghiệm logic và ứng dụng tốt. –

+0

Tôi hiểu, tôi biết, phiền phức của nó ... trong trường hợp bạn không thử điều này, có lẽ trang này (# 4 trong FAQ) có thể giúp - https://github.com/CocoaPods/CocoaPods/wiki/Creating -a-project-that-uses-CocoaPods – YoCoh

Trả lời

-2

Nếu bạn đang sử dụng XCode 5 sau đó tôi nghĩ this sẽ giúp

cơ bản cập nhật Gemfile của bạn (hoặc tạo một nếu nó không tồn tại) và thêm:

gem 'cocoapods', :git => 'http://github.com/CocoaPods/CocoaPods', :branch => 'xcode-5-support' 
gem 'xcodeproj', :git => 'http://github.com/CocoaPods/Xcodeproj', :branch => 'redacted-support' 

Ngoài ra nếu bạn có những thứ như config.build_settings['ARCHS'] = 'armv7' trong Podfile của bạn, đừng quên loại bỏ nó, bạn cũng sẽ cần phải có armv7.

Hy vọng điều này sẽ giúp, vì nó đã giúp tôi tiết kiệm một vài ngày trong cơn ác mộng.

2

Sự cố có thể là do bạn có các cấu hình xây dựng (tùy chỉnh) khác nhau.

Hãy xem này:

https://github.com/CocoaPods/CocoaPods/issues/121

Hãy thử thêm sau con đường tìm kiếm để "Thư viện Search Paths" (Đối với tất cả configs)

$(SYMROOT)/Release$(EFFECTIVE_PLATFORM_NAME) 
0

Bạn có thể thử chọn dự án Pods của bạn và thiết lập Build Settings-> Build Active Architectures Only-> NO cho Release và Debug, lặp lại hành động này cho mỗi mục tiêu trong Pods.

3

Cài đặt 'Danh mục đầu ra xây dựng' cũng có thể gây ra điều này.

Thay đổi giá trị của 'Xây dựng thư mục đầu ra' từ đường dẫn tương đối thành đường dẫn được chỉ định đầy đủ đã sửa nó cho tôi.

Ví dụ:thay vì 'MyOutputDirectory' sử dụng '/ Người dùng/Chia sẻ/Jenkins/home/jobs/JenkinsProject/workspace/MyOutputDirectory'

0

Tôi không thể nói với plugin XCode, vì vậy câu trả lời của tôi có thể được coi là hơi không phản hồi, nhưng đây là làm thế nào tôi có nó làm việc.

Tôi đã thêm một bước xây dựng trông như thế này:

export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer/ 
echo $WORKSPACE 
cd "/Users/[jenkins-accountname]/.jenkins/jobs/[jobname]/workspace/[xcode project name]" 
pod install 
xcrun xcodebuild -workspace [your workspace (not project) name] -scheme [the build scheme to build] clean build -destination "platform=iOS,name=CurtsiPhone" -destination-timeout 120 

Các -destination-destination-timeout là chìa khóa luận xây dựng để thành công. Dự án của tôi sẽ chỉ xây dựng trên điện thoại vì nó sử dụng các thư viện chuyên dụng, vì vậy điện thoại của tôi phải được cắm vào để XCode có thể tìm thấy nó. Bạn có thể không cần điều này nếu dự án của bạn sẽ xây dựng trong trình giả lập, tuy nhiên tôi chỉ nhận được nó khi làm việc một cách rõ ràng xác định đích đến.

Nếu plugin XCode cho phép bạn nêu thêm đối số biên dịch, bạn nên thử các tham số này.

Các vấn đề liên quan