পুনরায় স্বাক্ষর করুন আইপিএ (আইফোন)


129

আমি বর্তমানে আমার সমস্ত অ্যাপ্লিকেশনগুলি হডসনের সাথে এক্সকোডবিল্ড ব্যবহার করে তৈরি করি যার পরে কোনও সমস্যা ছাড়াই একটি এক্সক্রুন

আমি বিভিন্ন লোকের কাছ থেকে বেশ কয়েকটি আইপিএ ফাইল পেয়েছি যে আমি কর্পোরেট অ্যাকাউন্টের পরিবর্তে (অ্যাপ স্টোরের জন্য, বা কখনও কখনও অ্যাড-হকের বিতরণকৃত) জন্য একটি এন্টারপ্রাইজ অ্যাকাউন্ট দিয়ে পুনরায় সাইন করতে চাই।

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

আমি কিছু তথ্য পেয়েছি, ( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer- for- আপলোড / )

এবং এটি সম্ভব হতে পারে। আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল মোবাইল প্রভিশন প্রোফাইল এম্বেড করার মতো মনে হচ্ছে না কারণ আমি আমার সাধারণ বিল্ডগুলি (xcrun ব্যবহার করে) কোডইন সরঞ্জাম দিয়ে নিয়ন্ত্রণ করা সম্ভব, বা এক্সক্রনের সাথে পুনরায় সাইন ইন করা সম্ভব? ?

আমার পদত্যাগের লিপিটি আমি বর্তমানে করছি

  • আনজিপ app.ipa
  • অ্যাপনাম = $ (এলএস পেলোড)
  • xcrun -sdk আইফোনস প্যাকেজ অ্যাপ্লিকেশন -s "$ প্রভিশনিং_প্রোফাইল" "$ প্রকল্প_ডির / পেলোড / $ অ্যাপনাম" -o "$ প্রজেক্ট_ডির / অ্যাপ-রইনড.আইপিএ" --সাইন "$ প্রভিশনিং_প্রফাইলে" - এম্বেড "$ মোবাইলপ্রোভিজন"

আমি ফলস্বরূপ আইপা ফাইলটি দেখেছি এবং এটি মূল অ্যাপ্লিকেশনটির সাথে খুব মিল বলে মনে হচ্ছে। এখানে আসলে ফাইলগুলি পরিবর্তন করা উচিত? আমি প্রথমে ভেবেছিলাম _ কোডসইগনেচার / কোডআরসোর্সগুলি বদলে যাবে, তবে সামগ্রীটি দেখতে দেখতে অনেকটা একইরকম।

পয়েন্টার অনেক প্রশংসা করা হয়।

উত্তর:


211

অবশেষে এই কাজ পেয়েছিলাম!

প্রভিশন প্রোফাইলে কোনও ডিভাইস যুক্ত না করে অ্যাপ স্টোর জমা দেওয়ার জন্য সার্টি 1 দিয়ে স্বাক্ষরিত আইপিএর সাথে পরীক্ষিত। একটি এন্টারপ্রাইজ অ্যাকাউন্টের সাথে স্বাক্ষরিত একটি নতুন আইপিএর ফলাফল এবং ঘর মোতায়েনের জন্য মোবাইল সরবরাহকারী প্রোফাইল (মোবাইল প্রভিশন প্রোফাইল আইপিএতে এম্বেড হয়)।

সমাধান:

আইপিএ আনজিপ করুন

unzip Application.ipa

পুরানো কোডসাইনচার সরান

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

এম্বেড থাকা মোবাইল বিধানের প্রোফাইল প্রতিস্থাপন করুন

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

পদত্যাগ

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

রি-প্যাকেজ

zip -qr "Application.resigned.ipa" Payload

সম্পাদনা করুন: এনটাইটেলমেন্ট অংশটি সরানো হয়েছে (এলির মন্তব্য দেখুন, ধন্যবাদ)


6
আমাদের ইস্যু করার জন্য একটি জিনিস হ'ল এনটাইটেলমেন্ট ফাইল, যদি আপনার কাছে থাকে তবে অবশ্যই অ্যাপল সরবরাহিত অ্যাপ্লিকেশন আইডিটির সাথে মেলে। যেহেতু আমরা বান্ডেল আইডি পরিবর্তন করছিলাম তাই এনটাইটেলমেন্টগুলি মেলে না। অ্যাপ্লিকেশনটি চলবে, তবে প্রতিটি রান করার পরে কীচেইন পরিষ্কার হয়ে যাবে।
tjg184

5
Oleb.net/blog/2011/06/code-signing-changes-in-xcode-4 অনুসারে অ্যাপ্লিকেশন আইডিটি বাইনারি হিসাবে তৈরি করা হয়েছে, সুতরাং আপনি কেবল একই অ্যাপ্লিকেশন আইডি ব্যবহার করে পদত্যাগ করতে পারেন। আমি জানি আমি আলাদা অ্যাপ আইডি দিয়ে পদত্যাগ করতে পারিনি।
মাইকেল বাল্টাক্স

7
@ ভ্যালারিওসন্তাইনেলি আপনার আগের কোড সাইন ইন থেকে এনটাইটেলমেন্ট গ্রহণ করতে হবে। FWIW পুশ বিজ্ঞপ্তি এনটাইটেলমেন্ট ছাড়া কাজ করবে না। আনজিপিংয়ের পরে: /usr/bin/codesign -d --entitlements :entitlements.plist /Payload/appname.appতারপর পদত্যাগ করার সময় অ্যাড--entitlements entitlements.plist
পিটার

11
কোডসাইন ইয়োসেমাইটে ব্যর্থ - সতর্কতা: - ম্যাস ওএস এক্স> = 10.10 এ রিসোর্স-বিধিগুলি হ্রাস করা হয়েছে! পে-লোড / আএ.এপ / রিসোর্সআলিউস.পুলিস্ট: সংস্থানগুলি পড়তে পারে না
Jibeex

4
সতর্কতা: ম্যাক ওএস এক্স> = 10.10 - - উত্স-বিধি নিষ্ক্রিয় করা হয়েছে! পে-লোড / অ্যাপ্লিকেশন.এপ / রিসোর্সস রুলস.পুলিস্ট: সংস্থানগুলি পড়তে পারে না। এই ত্রুটি পাচ্ছেন?
মেঘা

44

এই প্রশ্নের উত্তরগুলি সামান্য পুরানো এবং সম্ভাব্য মূল পদক্ষেপগুলি অনুপস্থিত, সুতরাং এটি কোনও বহিরাগত বিকাশকারী থেকে অ্যাপ ইনস্টল করার জন্য একটি আপডেটড গাইড।

----- কোনও আইওএস অ্যাপ্লিকেশনটি কীভাবে পদত্যাগ করবেন -----

ধরা যাক আপনি অন্য বিকাশকারীর কাছ থেকে একটি অ্যাপ্লিকেশন (যেমন মাই অ্যাপ.আইপিএ) পেয়েছেন এবং আপনি এটি আপনার ডিভাইসগুলিতে ইনস্টল করতে এবং চালাতে সক্ষম হতে চান ( উদাহরণস্বরূপ আইডভাইসইনস্টলার ব্যবহার করে )।

নতুন স্বাক্ষরকারী সম্পদ প্রস্তুত করুন

প্রথম পদক্ষেপটি একটি প্রভিশনিং প্রোফাইল অর্জন করা হয় যা আপনি ইনস্টল করতে এবং চালাতে চান এমন সমস্ত ডিভাইস অন্তর্ভুক্ত করে। নিশ্চিত হয়ে নিন যে প্রোফাইলে এমন শংসাপত্র রয়েছে যা আপনি আপনার কীচেইন অ্যাক্সেসে ইনস্টল করেছেন (যেমন আইফোন বিকাশকারী: কিছু বডি (XXXXXXXXXX)) X প্রোফাইলটি ডাউনলোড করুন (মাইপ্রোফাইল.মোবাইলপ্রোভিশন) যাতে আপনি অ্যাপ্লিকেশনটিতে এম্বেড থাকা প্রোফাইলটি প্রতিস্থাপন করতে পারেন।

এর পরে, আমরা সাইন ইন অন্তর্ভুক্ত করার জন্য একটি এনটাইটেলমেন্ট ফাইল প্রস্তুত করতে যাচ্ছি। আপনার টার্মিনালটি খুলুন এবং নিম্নলিখিতটি চালান।

$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

এটি আপনার প্রভিশিং প্রোফাইল বর্ণনা করে একটি এক্সএমএল ফাইল তৈরি করবে । এর পরে, আমরা একটি ফাইলের মধ্যে এনটাইটেলমেন্টগুলি বের করতে চাই।

$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

প্রভিশনিং প্রোফাইলটি প্রতিস্থাপন করুন এবং অ্যাপ্লিকেশনটির পদত্যাগ করুন

আপনি যদি একটি সঙ্গে কাজ করেন, তাহলে .ipa ফাইল, প্রথম, অ্যাপ্লিকেশন আনজিপ (যদি আপনি একটি আছে .app পরিবর্তে, আপনি এই পদক্ষেপটি এড়িয়ে যেতে পারেন)।

$ unzip MyApp.ipa

আপনার ওয়ার্কিং ডিরেক্টরিতে এখন থাকবে Payload/এবং Payload/MyApp.app/। এরপরে, পুরানো কোড স্বাক্ষর ফাইলগুলি সরান।

$ rm -rf Payload/MyApp.app/_CodeSignature

বিদ্যমান প্রভিশিং প্রোফাইলটি (যেমন এম্বেডড.মোবাইলপ্রোভিশন) আপনার নিজের সাথে প্রতিস্থাপন করুন।

$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

আপনার প্রভিশন প্রোফাইলে অন্তর্ভুক্ত শংসাপত্র এবং আপনি পূর্বে তৈরি করা এনটাইটেলমেন্ট.প্লবিক দিয়ে অ্যাপটিতে স্বাক্ষর করুন।

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app

গুরুত্বপূর্ণ: আপনাকে অবশ্যই অ্যাপে অন্তর্ভুক্ত সমস্ত ফ্রেমওয়ার্ক পদত্যাগ করতে হবে । আপনি এটি খুঁজে পাবেন Payload/MyApp.app/Frameworks। অ্যাপটি যদি সুইফটে লেখা থাকে বা এতে কোনও অতিরিক্ত ফ্রেমওয়ার্ক অন্তর্ভুক্ত থাকে তবে এগুলি অবশ্যই পদত্যাগ করতে হবে বা অ্যাপটি ইনস্টল হবে তবে চালিত হবে না।

$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

আপনি এখন অ্যাপ্লিকেশনটি রিজিপ করতে পারেন।

$ zip -qr MyApp-resigned.ipa Payload

সম্পন্ন

আপনি এখন Payloadডিরেক্টরিটি অপসারণ করতে পারেন যেহেতু আপনার নিজের মূল অ্যাপ্লিকেশন (মাই অ্যাপ.আইপিএ) এবং আপনার পদত্যাগ করা সংস্করণ (মাই অ্যাপ্লিকেশন - রিজাইন্ড.আইপিএ) রয়েছে। আপনি এখন আপনার প্রভিশন প্রোফাইলে অন্তর্ভুক্ত যেকোন ডিভাইসে মাই অ্যাপ-ইজিপ্ট করেছেন.আইপিএ ইনস্টল করতে পারেন।


এই একই পদ্ধতি কি বিতরণ প্রোফাইলগুলিতে প্রযোজ্য? আইই: আমি কি আমার ডিস্ট্রো.মোবাইলপ্রভিশন থেকে এনটাইটেলমেন্টগুলি পুনরায় সাইন করতে পারি?
চেজ ফ্লোরেল

@ গ্রেজ এটিও আইপিএ বিতরণের জন্য কাজ করবে?
লার্নিওস

আমি বলতে চাইছি 'এন্টারপ্রাইজ' অ্যাপ্লিকেশন আইপিএ পাশাপাশি বিতরণ করুন
@

@LearneriOS এটি এন্টারপ্রাইজ আইপিএ বিতরণের জন্য আমার পক্ষে কাজ করে নি। আমি সিয়েরা, এক্সকোড 8, আইওএস 10 ব্যবহার করছি The অ্যাপটি আইটিউনসের মাধ্যমে ইনস্টল করে তবে ইনস্টলেশনের পরে অবিলম্বে মুছে ফেলা হবে।
ব্রায়ান ব্রাইস

@ ফিনিক্সএফএফ আমি আইটিউনস ইনস্টল করার বিষয়ে নিশ্চিত নই, তবে আপনি কি এইভাবে কমান্ড লাইন থেকে ইনস্টল করার চেষ্টা করতে পারেন: v আইডভিসাইন্সটলার -i myapp.ipa
ইনিসব্রেন্ডান

11

আমি এই উত্তরটি সফলভাবে অনুসরণ করেছি, তবে যেহেতু এনটাইটেলমেন্টগুলি পরিবর্তন হয়েছে, আমি কেবল --entitlements "Payload/Application.app/Entitlements.plist"দ্বিতীয়টির শেষ অংশটি শেষ বিবৃতিতে সরিয়ে দিয়েছি , এবং এটি একটি কবজির মতো কাজ করেছে।


আমি আগের মন্তব্য 2 য় করব। আধুনিক টুলকিট দিয়ে এই কাজটি করতে এনটাইটেলমেন্টগুলি সরান।
ব্রুনো ব্রোনোস্কি

2
এনটাইটেলমেন্ট ছাড়াই আমার অ্যাপটি লগ ইন করে: সত্যই অদ্ভুত কাজ শুরু করে SecItemCopyMatching: missing entitlement। আমি তাই এনটাইটেলমেন্ট আমি ব্যবহৃত সংরক্ষণে পৃথক Entitlements.plist ফাইল নয় আছে, না @ LordT এর মন্তব্য প্রথমে একটি এনটাইটেলমেন্ট ফাইল তৈরি: echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>/usr/bin/codesign -d --entitlements - temp/Payload/$APP_NAME | sed -E -e '1d'" > temp/newEntitlementsতারপর, যখন সাইন ইন এটা ব্যবহার করুন: --entitlements temp/newEntitlements
বুলাত

5

ম্যাক ওএস হাই সিয়েরা এবং এক্সকোড 10 দিয়ে পরীক্ষা করা হয়েছে

আপনি কেবল অ্যাপ্লিকেশন iResign ব্যবহার করে একই বাস্তবায়ন করতে পারেন ।

২) পাথ দিন ip

2) নতুন বিধান প্রোফাইল

3) এনটাইটেলমেন্ট ফাইল (alচ্ছিক, কেবলমাত্র এনটাইটেলমেন্ট থাকলে যোগ করুন)

4) বান্ডিল আইডি

5) বিতরণ শংসাপত্র

আপনি পুনরায় সাইন ইন করার পরে আউটপুট .ipa ফাইল সংরক্ষণ করতে পারেন

সহজ এবং শক্তিশালী সরঞ্জাম


4

এই পদত্যাগকারী পদ্ধতির কোনওটিই আমার পক্ষে কাজ করছে না, তাই আমাকে অন্য কিছু করতে হয়েছিল work

আমার ক্ষেত্রে, আমার একটি মেয়াদোত্তীর্ণ শংসাপত্র সহ একটি আইপিএ ছিল। আমি অ্যাপটি পুনর্নির্মাণ করতে পারতাম, তবে আমরা নিশ্চিত করতে চেয়েছিলাম যে আমরা ঠিক একই সংস্করণটি বিতরণ করছি (কেবলমাত্র একটি নতুন শংসাপত্র সহ) আমরা এটিকে পুনর্নির্মাণ করতে চাইনি।

অন্যান্য উত্তরে উল্লিখিত পদত্যাগের পদ্ধতির পরিবর্তে, আমি আইপিএ তৈরির জন্য Xcode- র পদ্ধতির দিকে প্রত্যাবর্তন করেছি, যা একটি বিল্ড থেকে .xcarchive দিয়ে শুরু হয়।

  1. আমি একটি বিদ্যমান .xcarchive সদৃশ এবং বিষয়বস্তু প্রতিস্থাপন শুরু। (আমি .dSYM ফাইলটিকে অগ্রাহ্য করেছি))

  2. আমি পুরানো আইপিএ ফাইল থেকে পুরানো অ্যাপ্লিকেশনটি বের করেছি (আনজিপিংয়ের মাধ্যমে; অ্যাপ্লিকেশনটি পেললোড ফোল্ডারে একমাত্র জিনিস)

  3. আমি এই অ্যাপ্লিকেশনটি নতুন অ্যাপ্লিকেশনটিতে স্থানান্তরিত করে সেখানে নতুন Products/Applicationsঅ্যাপ্লিকেশন তৈরি করেছি app

  4. আমি সম্পাদনা করেছি Info.plist, সম্পাদনা করছি

    • ApplicationProperties/ApplicationPath
    • ApplicationProperties/CFBundleIdentifier
    • ApplicationProperties/CFBundleShortVersionString
    • ApplicationProperties/CFBundleVersion
    • Name
  5. আমি সাধারণত .ccode এর সংরক্ষণাগার ফোল্ডারে .xcarive স্থানান্তরিত করেছি /Users/xxxx/Library/Developer/Xcode/Archives

  6. এক্সকোডে, আমি অর্গানাইজার উইন্ডোটি খুললাম, এই নতুন সংরক্ষণাগারটি বেছে নিয়েছি এবং একটি নিয়মিত (এই ক্ষেত্রে এন্টারপ্রাইজ) রফতানি করেছি।

ফলাফলটি একটি ভাল আইপিএ যা কাজ করে।


1
এটি একটি প্রতিভা সমাধান যা এখনও এক্সকোড 9.2 হিসাবে কাজ করে। আমার ক্ষেত্রে আমি কেবলমাত্র বিদ্যমান .xcarchive এর অধীনে পুরানো। অ্যাপ ফাইলটি অনুলিপি করেছি। আমি তথ্য.প্লেস্টটি পরিবর্তন করি নি এবং তাই অ্যাপ্লিকেশন সংস্করণটি পুরানো সংস্করণ হিসাবে রয়ে গেছে তবে নতুন এন্টারপ্রাইজ শংসাপত্রের সাথে স্বাক্ষরিত হয়েছিল।
ডডজি_কোডার

3

আমার মনে হয় ফাস্টলেন ব্যবহার করা সবচেয়ে সহজ:

sudo gem install fastlane -NV
hash -r # for bash
rehash # for zsh
fastlane sigh resign ./path/app.ipa --signing_identity "iPhone Distribution: Felix Krause" -p "my.mobileprovision"

আমি অনেক উপায়ে চেষ্টা করেছি কিন্তু ভাগ্য নেই। এই সমাধানটি আমার জন্য ধন্যবাদ ধন্যবাদ।
ওমিদ কিয়া

1

ফাস্টলেন দীর্ঘশ্বাসের পদত্যাগের বিকল্পের সাহায্যে আপনি এটি খুব সহজেই করতে পারেন।

sigh resign -p <path-to-profile-with-mobileprovision-ext> -i <code-sighning-identity-of-your-app>

আপনি দীর্ঘশ্বাস ব্যবহার করে প্রোফাইলটি ডাউনলোড করতে পারেন, কমান্ডের ঠিক আগে।


0

আপনাকে পোস্ট করার জন্য এরিক, আপনাকে ধন্যবাদ। এটি আমার পক্ষে কাজ করেছে। আমি আমার অতিরিক্ত অতিরিক্ত পদক্ষেপের জন্য একটি নোট যুক্ত করতে চাই। মধ্যে "পেলোড / Application.app /" সেখানে "নামের একটি ডিরেক্টরির ছিল CACertChains " যে "নামে একটি ফাইল অন্তর্ভুক্ত cacert.pem "। এই পদক্ষেপগুলি শেষ করার জন্য আমাকে ডিরেক্টরি এবং .pem সরিয়ে ফেলতে হয়েছিল। আবার ধন্যবাদ! -


-1

আপনার যদি এক্সটেনশান এবং / অথবা একটি ওয়াচ অ্যাপ্লিকেশন সহ একটি অ্যাপ্লিকেশন এবং আপনার প্রতিটি এক্সটেনশান / ওয়াচ অ্যাপ্লিকেশনটির জন্য একাধিক প্রভিশন প্রোফাইল থাকে তবে আপনার এই স্ক্রিপ্টটি আইপা ফাইলটিতে পুনরায় সাইন ইন করতে ব্যবহার করা উচিত।

গিথুবে পুনরায় স্বাক্ষরকারী স্ক্রিপ্ট

এই স্ক্রিপ্টটি কীভাবে ব্যবহার করবেন তার একটি উদাহরণ এখানে দেওয়া হয়েছে:

./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision  resignedYourApp.ipa

আপনি অন্য এক্সটেনশন প্রভিশন প্রোফাইলগুলিকে আরও অন্য -p বিকল্পের সাথে যুক্ত করে এতে অন্তর্ভুক্ত করতে পারেন।

আমার জন্য - সমস্ত বিধানকারী প্রোফাইলগুলি একই শংসাপত্র / স্বাক্ষর পরিচয় দিয়ে স্বাক্ষরিত হয়েছিল।


আপনার লিঙ্কটি নষ্ট হয়েছে ... লেখকের গিথুব দেখে এই বিকল্পটি খুঁজে পেয়েছেন। github.com/fastlane/fastlane/blob/…
জাগুটিয়ার

এটি একটি পুরানো উত্তর এবং সম্ভবত মুছে ফেলা উচিত কারণ এটি আর কাজ করে না তবে স্ট্যাক ওভারফ্লোতে এটি মুছার কোনও উপায় নেই
আরপিএম

1
এটি আমাদের পক্ষে কাজ করেছে, কেবলমাত্র এটির
رف

ঠিক আছে তা জেনে রাখা ভাল যে এটি এখনও কাজ করে। মূল উত্তরটি আর সম্পাদনা করতে পারবেন না যাতে লোকদের মন্তব্যগুলি পড়তে হবে :)
আরপিএম

fastlane sigh resign YourApp.ipa --signing_identity "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovisionপরিবর্তে ব্যবহার করুন।
সবুজ 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.