2013-12-09 16 views
5

Nhóm của tôi mới bắt đầu sử dụng CocoaPods để quản lý sự phụ thuộc trong dự án ứng dụng iOS của chúng tôi.Chỉ hỗ trợ các nền tảng được hỗ trợ, SDK cơ bản, xây dựng cấu trúc hoạt động chỉ sau khi cập nhật nhóm

Đây là podfile:

platform :ios, '6.0' 

pod "UI7Kit" 
pod "AFNetworking", "~> 2.0" 
pod "TMCache" 
pod "SVProgressHUD" 
pod "SVPullToRefresh" 

Tuy nhiên, sau khi sử dụng CocoaPods, xây dựng mục tiêu cho iPhone 5 luôn thất bại, nhưng thành công cho mô phỏng.

Dưới đây là các bản ghi lỗi:

ld: warning: ignoring file [DerivedData directory]/libPods.a, file was built for archive which is not the architecture being linked (armv7): [DerivedData directory]/libPods.a 
Undefined symbols for architecture armv7: 
    "_OBJC_CLASS_$_SVProgressHUD", referenced from: 
     objc-class-ref in ....o 
    "_OBJC_CLASS_$_TMCache", referenced from: 
     objc-class-ref in ....o 
    "_OBJC_CLASS_$_UI7Kit", referenced from: 
     objc-class-ref in ....o 
ld: symbol(s) not found for architecture armv7 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Tôi đã thử các giải pháp nêu tại CocoaPods Troubleshooting, bao gồm thêm các thư viện tĩnh Pods trên đầu danh sách, nhưng nó vẫn bị lỗi.

Sau đó, chúng tôi thấy rằng trong "Cài đặt dự án"> "SDK cơ sở" được đặt là "Không có SDK (OS X mới nhất)", "Chỉ xây dựng kiến ​​trúc hoạt động"> "Gỡ lỗi "được đặt là" Có "và" Nền tảng được hỗ trợ "được đặt là" OS X ". Sau khi thay đổi chúng thành "iOS mới nhất (iOS 7.0)", "Không", "iOS" tương ứng, xây dựng cho iPhone 5 và giả lập cả hai hoạt động tốt.

Tuy nhiên, mỗi lần chúng tôi thực hiện Pod update, tất cả ba cài đặt đều được hoàn nguyên về trạng thái trước đó, điều này gây phiền toái.

Câu hỏi của tôi là:

  1. là trường hợp này bằng cách thiết kế hoặc một cái gì đó là sai trái với dự án thiết lập của tôi/không gian làm việc?
  2. Làm cách nào để ngăn các cài đặt này được hoàn nguyên về trạng thái sai?

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

0

Thiết bị Pods Project không quan trọng, điều quan trọng là cài đặt Nhắm mục tiêu cho lib tĩnh Pod. Nhưng bạn không cần phải chạm vào chúng.

Bạn có thể đăng cài đặt bản dựng của mình từ dự án/mục tiêu của bạn không? Hướng dẫn khắc phục sự cố đề xuất some build settings in case of failed build, chúng có giúp ích gì không? Đảm bảo bật để hiển thị tất cả các cài đặt xây dựng và kiểm tra xem một số cài đặt có ghi đè những cài đặt được chỉ định trong tệp xcconfig mà CocoaPod được tạo hay không.

Đồng thời kiểm tra xem dự án của bạn có dựa trên tệp xcconfig trong tab Thông tin của dự án hay không. enter image description here

Tôi hy vọng điều này sẽ hữu ích.

+0

Rất tò mò, cài đặt Dự án của Pod có vẻ quan trọng, mặc dù cài đặt đích là chính xác. Chỉ sau khi cập nhật thủ công các cài đặt dự án của Pod sao cho chúng có bộ SDK cơ sở thì có vẻ như nó sẽ sửa chữa nó trong hầu hết các trường hợp. Tôi đã không thể tìm hiểu lý do tại sao các cài đặt PROs PodJECT trở lại không có SDK cơ sở mỗi lần cập nhật "pod" được thực hiện. –

3

Như đã đề cập trong CocoaPods issues, bạn có thể thêm này để Podfile của bạn:

post_install do |installer_representation| 
    installer_representation.project.targets.each do |target| 
     target.build_configurations.each do |config| 
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 
     end 
    end 
end 

Điều này sẽ làm cho tất cả pods xây dựng cho tất cả vòm.

1

Tôi thấy mình cũng gặp phải tình huống này, sử dụng Cocoapods 0.36.3 và Xcode 6.2. Tôi rất nghi ngờ rằng đây là giải pháp tốt nhất, nhưng tôi đã viết một hook để đi ở dưới cùng của Podfile của tôi mà reset các thiết lập "BaseSDK", "Platform", và "Build Active Architecture Only" trong dự án Pods.Tôi cũng đặt "Chỉ xây dựng Kiến trúc Hoạt động" thành "KHÔNG" cho từng mục tiêu, để có biện pháp tốt (như đã đề cập trong bài viết trên).

post_install do |installer_representation| 
    projectSDK = nil 

    puts"Updating all of the POD targets to not default to ONLY_ACTIVE_ARCH for debug" 
    installer_representation.project.targets.each do |target| 
     target.build_configurations.each do |config| 
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 
      if projectSDK.nil? 
       projectSDK = config.build_settings['SDKROOT'] 
      end 
     end 
    end 
    puts "Updating ONLY_ACTIVE_ARCH for the project, as well. While the project settings aren't supposed to matter, I've not found that to be the case." 
    puts "Also setting the base SDK of the project to match that of the targets (doesn't matter which one); otherwise it defaults to No SDK (Latest OS X)" 
    installer_representation.project.build_configurations.each do |config| 
     config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 
     config.build_settings['SDKROOT'] = projectSDK 
    end 
end 
0

Đối với bất cứ ai sử dụng mới nhất pods Cocoa

post_install do |installer_representation| 
installer_representation.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 
     config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 
    end 
end 

cuối

1

tôi sử dụng để làm theo thủ tục mà ... bây giờ với cocoapods và nhiều hơn nữa giờ vào vấn đề tôi chọn cho:

# fixes required for xcode project 
post_install do |installer_representation| 

puts "" 
puts "Updating VALID_ARCHS, SUPPORTED_PLATFORMS, SDKROOT for the project..." 

installer_representation.pods_project.build_configurations.each do |config| 

# config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 

    config.build_settings['VALID_ARCHS'] = 'arm64 armv7 armv7s' 

    config.build_settings['SUPPORTED_PLATFORMS'] = 'iphonesimulator iphoneos' 

# setting the base SDK of the project to match that of the project, 
# otherwise it defaults to No SDK (Latest OS X)" 
    config.build_settings['SDKROOT'] = 'iphoneos' 

# it sets 'Valid Architectures' to '$(ARCHS_STANDARD)' to all pods 
#  config.build_settings['SDKROOT'] = projectSDK 
end 



puts "" 
puts "Updating all of the watch POD targets with specific..." 

installer_representation.pods_project.targets.each do |target| 
    target.build_configurations.each do |config| 

     if (config.build_settings['SDKROOT'] == 'watchos') 
      puts "fixing SUPPORTED_PLATFORMS & VALID_ARCHS for #{target.name} #{config.name}" 
      config.build_settings['SUPPORTED_PLATFORMS'] = 'watchsimulator watchos' 
      config.build_settings['VALID_ARCHS'] = 'arm64 armv7 armv7s armv7k i386' 
     end 

# to not default to ONLY_ACTIVE_ARCH for debug" 
#   config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO' 
#   config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = "NO" 
    end 
end 

puts "" 

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