আমি আমার এক্সকোড প্রকল্পের জন্য আমার পডফাইলে একাধিক লক্ষ্যগুলি কীভাবে নির্দিষ্ট করব?


142

আমি আমার এক্সকোড 4 প্রকল্পের সাথে কোকোপড ব্যবহার করছি এবং আমার প্রকল্পের জন্য আমার তিনটি লক্ষ্য রয়েছে (ডিফল্ট, একটি লাইট সংস্করণ তৈরির জন্য এবং একটি ডেমো সংস্করণ তৈরির জন্য একটি)। সমস্ত লক্ষ্যগুলি একই লাইব্রেরি ব্যবহার করে তবে কোকোপডগুলি কেবলমাত্র প্রাথমিক লক্ষ্যটিতে স্থির গ্রন্থাগার এবং অনুসন্ধানের পথগুলি যুক্ত করে। আমার পডফাইলে দেখতে এমন দেখাচ্ছে:

platform :ios, '5.0'

pod 'TestFlightSDK', '>= 1.1'
pod 'MBProgressHUD', '0.5'
pod 'iRate', '>= 1.6.2'
pod 'TimesSquare', '1.0.1'
pod 'AFNetworking', '1.1.0'
pod 'KKPasscodeLock', '0.1.5'
pod 'iCarousel', '1.7.4'

আমি এই কাজটি করার একমাত্র উপায় হ'ল আবার তালিকাভুক্ত সমস্ত শুঁটি দিয়ে প্রতিটি লক্ষ্য পৃথকভাবে নির্দিষ্ট করা।

platform :ios, '5.0'

target :default do  
    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :lite do 
    link_with 'app-lite'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

target :demo do 
    link_with 'app-demo'

    pod 'TestFlightSDK', '>= 1.1'
    pod 'MBProgressHUD', '0.5'
    pod 'iRate', '>= 1.6.2'
    pod 'TimesSquare', '1.0.1'
    pod 'AFNetworking', '1.1.0'
    pod 'KKPasscodeLock', '0.1.5'
    pod 'iCarousel', '1.7.4'
end

এই কাজ করতে একটি ভাল উপায় আছে কি?


দয়া করে বিমূর্ত লক্ষ্য সম্পর্কে পড়ুন। এটি আপনার যা প্রয়োজন guides.cocoapods.org/syntax/podfile.html#abstract_target
নিক কোভ

উত্তর:


339

কোকোপডস 1.0 এর জন্য সিনট্যাক্সটি পরিবর্তন করেছে। এটি এখন এটির মতো দেখাচ্ছে:

def shared_pods
    pod 'SSKeychain', '~> 0.1.4'
    pod 'INAppStoreWindow', :head
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
    pod 'KSADNTwitterFormatter', '~> 0.1.0'
    pod 'MASShortcut', '~> 1.1'
    pod 'MagicalRecord', '2.1'
    pod 'MASPreferences', '~> 1.0'
end

target 'Sail' do
    shared_pods
end

target 'Sail-iOS' do
    shared_pods
end

অসমাপ্ত প্রাক কোকোপডগুলি 1.0 উত্তর:

হ্যাঁ আরও ভাল উপায় আছে! একাধিক লক্ষ্য নির্দিষ্ট link_withকরতে আপনি কোথায় করতে পারেন তা পরীক্ষা করে দেখুন link_with 'MyApp', 'MyOtherApp'

আমি এটি ইউনিট পরীক্ষার মতো ব্যবহার করি link_with 'App', 'App-Tests'(টার্গেটের নামগুলিতে স্পেস থেকে সাবধান থাকুন)।

উদাহরণ:

platform :osx, '10.8'

link_with 'Sail', 'Sail-Tests'

pod 'SSKeychain', '~> 0.1.4'
pod 'INAppStoreWindow', :head
pod 'AFNetworking', '1.1.0'
pod 'Reachability', '~> 3.1.0'
pod 'KSADNTwitterFormatter', '~> 0.1.0'
pod 'MASShortcut', '~> 1.1'
pod 'MagicalRecord', '2.1'
pod 'MASPreferences', '~> 1.0'

2017 আপডেট

আপনি বিমূর্ত_তারেকে ব্যবহার করতে পারেন

# Note: There are no targets called "Shows" in any of this workspace's Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'

  # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Our tests target has its own copy of
  # our testing frameworks, and has access
  # to ShowsKit as well because it is
  # a child of the abstract target 'Shows'

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end

দুর্দান্ত, তাহলে আপনি আমার প্রথম উদাহরণের পডফাইলে লিংকটি_ কোথায় রাখবেন? আপনি আমাকে একটি উদাহরণ দেখাতে পারেন?
অস্টিন

আমার উত্তর আপডেট। এটা আসলে কোন ব্যাপার না।
কিথ স্মাইল

4
আমি একই জিনিসটি চেষ্টা করছি, তবে আমার ক্ষেত্রে, আমি মূল লক্ষ্যটির একাধিক লক্ষ্য নির্ভরতার সাথে যুক্ত করছি। এর ফলে লিঙ্কিং পর্যায়ে সদৃশ চিহ্নগুলির ত্রুটি পাওয়া যায়। কোকোপডস ব্যবহার করে কীভাবে এটিকে ঘিরে আপনি জানেন?
ফারগাল রুনি

2
দেখে মনে হচ্ছে আপনার লক্ষ্যগুলির তালিকার চারপাশে বন্ধনীগুলির আর দরকার নেই (এবং কাজ করে না?)। ডিয়েট: গাইডস
পডফিল.ইচটিএমএল

2
@ কিথস্মিলি আসলে আমি এখনও সেই জায়গাগুলি নিয়ে সমস্যায় পড়েছি। কোনও স্থান না থাকার জন্য আমাকে আমার সমস্ত লক্ষ্যগুলির নাম পরিবর্তন করতে হয়েছিল। ব্যয় করে যে কোকোপডসের লিঙ্ক_বিহীন পরিবর্তে (সমস্ত লক্ষ্যমাত্রার জন্য করণীয়) নেই।
হিশামাউস

91

আমি মনে করি আরও ভাল সমাধান

# Podfile

platform :ios, '8.0'

use_frameworks!

# Available pods

def available_pods
    pod 'AFNetworking', '1.1.0'
    pod 'Reachability', '~> 3.1.0'
end

target 'demo' do
  available_pods
end

target 'demoTests' do
    available_pods
end

থেকে রেফারেন্স: http://natashatherobot.com/cocoapods-installing-same-pod-m Multipleple-targets/


1
কেন এটি আরও ভাল সমাধান বলে আপনি বোঝাতে আপত্তি করেন?
ওয়ার্পলিং

1
@ ওয়ার্পলিং: দয়া করে এই নাটাসাথেরোবট.com/…
আদর্শ জিজে

9
আপনি এখানে সেই ব্যাখ্যাটির কিছুটা যোগ করলে এটি দুর্দান্ত হবে। (লিঙ্কগুলি নিচে যাওয়ার ক্ষেত্রে ইত্যাদি সম্পর্কিত সমস্ত তথ্য রাখা খুব ভাল necessary) এটির মাধ্যমে লোকেরা সমস্যাটি দেখতে link_withএবং আপনার উত্তরটিকে
উজ্জীবিত

আমি এই পদ্ধতির পছন্দ করি কারণ এটি সমস্ত লক্ষ্য (উপলভ্য_পড) এবং লক্ষ্য নির্দিষ্ট নির্দিষ্ট পোডের জন্য একগুচ্ছ পোড উপলব্ধ।
অ্যাপোক

এই সমাধানটি সূক্ষ্মভাবে কাজ করে, তবে এমন একটি বিষয় যা উল্লেখযোগ্য: আপনার 'ডিফ' মানগুলি ছোট হাতের হতে হবে।
জেরোম

9

আপনি যদি একই পোড ভাগ করে নেওয়ার জন্য একাধিক লক্ষ্যবস্তু চান তবে একটি বিমূর্ত_তার্গেট ব্যবহার করুন।

# There are no targets called "Shows" in any Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'
  pod 'Fabric'

  # Has its own copy of ShowsKit + ShowWebAuth
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end
end

বা শুধু

pod 'ShowsKit'
pod 'Fabric'

# Has its own copy of ShowsKit + ShowWebAuth
target 'ShowsiOS' do
  pod 'ShowWebAuth'
end

# Has its own copy of ShowsKit + ShowTVAuth
target 'ShowsTV' do
  pod 'ShowTVAuth'
end

উত্স: https://guides.cocoapods.org/using/the-podfile.html


2

সবচেয়ে সহজ উপায় হ'ল একটি বিমূর্ত লক্ষ্য ব্যবহার করা, যেখানে নির্দিষ্ট প্রতিটি পোড সমস্ত লক্ষ্যের সাথে যুক্ত হবে।

abstract_target 'someNameForAbstractTarget' do
  pod 'podThatIsForAllTargets'
end

target 'realTarget' do
  pod 'podThatIsOnlyForThisTarget'
end

বাইরে না realTargetগিয়ে ভিতরে যাওয়া someNameForAbstractTargetউচিত?
শুভম বক্সী

অন্যান্য উত্তর দিয়ে বিচার করা এটি সেভাবে কাজ করতে পারে।
সায়াগকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.