সিক্টিম্যাটড সর্বদা আইওএস 10 সিমুলেটারে এক্সকোড 8 এ ত্রুটি -34018 প্রদান করে


103

আপডেট : এই সমস্যাটি Xcode 8.2 এ স্থির করা হয়েছে। কীচেইন কীচেন ভাগ করে নেওয়া সক্ষম না করে সিমুলেটারে কাজ করে।

এক্সকোড 8 / আইওএস 10 সিমুলেটারে ফাংশন কল করার সময় আমি কেন সর্বদা ত্রুটি -34018 পাচ্ছি ?SecItemAdd

ধাপ পুনর্গঠন কর

এক্সকোড ৮ এ একটি নতুন একক পৃষ্ঠার আইওএস অ্যাপ্লিকেশন তৈরি করুন the নিম্নলিখিত কোডটি চালান viewDidLoad(বা এই এক্সকোড প্রকল্পটি খুলুন )।

let itemKey = "My key"
let itemValue = "My secretive bee 🐝"

// Remove from Keychain
// ----------------

let queryDelete: [String: AnyObject] = [
  kSecClass as String: kSecClassGenericPassword,
  kSecAttrAccount as String: itemKey as AnyObject
]

let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary)

if resultCodeDelete != noErr {
  print("Error deleting from Keychain: \(resultCodeDelete)")
}


// Add to keychain
// ----------------

guard let valueData = itemValue.data(using: String.Encoding.utf8) else {
  print("🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣 Error saving text to Keychain")
  return
}

let queryAdd: [String: AnyObject] = [
  kSecClass as String: kSecClassGenericPassword,
  kSecAttrAccount as String: itemKey as AnyObject,
  kSecValueData as String: valueData as AnyObject,
  kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
]

let resultCode = SecItemAdd(queryAdd as CFDictionary, nil)

if resultCode != noErr {
  print("🐝🐝🐝🐝🐝🐝🐝🐝🐝 Error saving to Keychain: \(resultCode).")
} else {
  print("🍀🍀🍀🍀🍀🍀🍀🍀🍀 Saved to keychain successfully.")
}

প্রত্যাশিত ফলাফল

আইটেমটি কীচেইনে যুক্ত করা হয়েছে।

প্রকৃত ফলাফল

ফাংশন SecItemAdd ফেরৎ নিম্নলিখিত ত্রুটির কোড: -34018

সংস্করণ

এক্সকোড সংস্করণ 8.1 (8 বি 62), ম্যাকস সিয়েরা 10.12.1।

কনফিগারেশন

আইওএস 10 সিমুলেটারে পরীক্ষার সময় বিটা 2 থেকে সর্বদা এক্সকোড 8 এ ঘটে।

কোনও আইওএস 9.3 সিমুলেটারে পরীক্ষা করার সময় এক্সকোড 8 এ ঘটে না।

ডেমো

https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip

তথ্যসূত্র

রাডার: https://openradar.appspot.com/27422249

অ্যাপল বিকাশকারী ফোরাম: https://forums.developer.apple.com/message/179846

এই সমস্যাটি নিম্নলিখিত পোস্টের থেকে পৃথক কারণ এটি ধারাবাহিকভাবে Xcode 8 এ ঘটে Sec


8
এটি এখনও Xcode 8 GM তে একটি সমস্যা হিসাবে উপস্থিত রয়েছে। অ্যাপল এখনও তাদের খেলায় শীর্ষে রয়েছে দেখে ভাল
লাগল

1
আমার জন্য একই, এখনও এই ত্রুটি
Kostiantyn Koval

আমি সত্যিই আপনার কনসোল লগগুলি খনন করছি :-)
নিকোলাস মায়ারি

সমস্যাটি Xcode 8.2 এ ঠিক করা হয়েছিল তবে এটি Xcode 9.0 এ ফিরে এসেছে!
আদিল হুসেন

উত্তর:


183

এনটাইটেলমেন্ট ফাইলে কীচেইন অ্যাক্সেস গ্রুপগুলি যোগ করে আমি আমার অ্যাপ্লিকেশনটিতে এটি ঘিরে কাজ করতে সক্ষম হয়েছি । আমি আপনার পরীক্ষার অ্যাপ্লিকেশনটিতে সক্ষমতার বিভাগে কীচেইন ভাগ করে নেওয়ার স্যুইচটি চালু করেছি এবং এটি আমার জন্যও কাজ করছে।

স্যুইচটি চালু করার স্ক্রিনশট

এনটাইটেলমেন্টে যুক্ত আইটেম:

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)com.evgenii.KeychainBugDemo</string>
</array>

আমি এটি কেবল ম্যাকস সিয়েরায় (10.12) চেষ্টা করেছি, সুতরাং আমি নিশ্চিত নই যে এটি 10.11.5-এ আপনার জন্য কাজ করবে কিনা।


এখানে একই, কেবলমাত্র আমি বর্তমানে এক্সকোড 8 বিটা 5 ব্যবহার করছি (আইওএস 10 সিমুলেটরের সাথে previous আমি লক্ষ্য করেছি যে সক্ষমতার মধ্যে পুশ বিজ্ঞপ্তিগুলির ফিক্সিংয়ের প্রয়োজন ছিল (অর্থাত্ বোতাম টিপতে) এবং একই সাথে দুর্ভাগ্যক্রমে দুর্ভাগ্যক্রমে কীচেইন ভাগ করে নেওয়া চালু করে। তারপরে অ্যাপটি ত্রুটিটি আর পায় নি। বাঁক পর বন্ধ কীচেইনে ভাগ আবার, এটা এখনও কাজ করে!
স্টেফান

2
আমি কীচেইনকে একটি পরীক্ষার লক্ষ্য ব্যবহার করি এবং এটি ব্যর্থ হয় - আমি কীভাবে এটি পেতে পারি? (যেহেতু পরীক্ষার লক্ষ্যগুলিতে কোনও ক্ষমতা নেই)
স্যাম জারম্যান

1
@ সামজর্মান আমারও এই সমস্যা ছিল। আমি কেবল পরীক্ষার টার্গেটের জন্য বিল্ড সেটিংসে গিয়েছিলাম এবং এনটাইটেলমেন্ট ক্ষেত্রটি অ-সেট করে রেখেছি। তারপরে সূক্ষ্মভাবে কাজ করেছি।
জর্দান বোন্ডো

3
এই সমাধানটি অ্যাপ টার্গেটের জন্য ভাল কাজ করে। দুর্ভাগ্যক্রমে, আমি একটি সুইফট ফ্রেমওয়ার্কে কাজ করছি যা কীচেইনসুইফ্ট ব্যবহার করে যা ত্রুটির কারণে আর তৈরি করে না। একটি কাঠামোর লক্ষ্যবস্তুতে, আমি একটি এনটাইটেলমেন্ট ফাইল আফাইক যুক্ত করতে পারি না। এই মামলার জন্য কেউ কি একদম কাজ করতে পারে?
জান ন্যাশ

5
@JanNash, এখানে কিভাবে আমি পরীক্ষামূলক কাজ করতে পরিচালিত evgenii.com/blog/testing-a-keychain-library-in-xcode
Evgenii

17

ইন Xcode 8.1 জিএম রিলিজ নোট অ্যাপল সমস্যা স্বীকৃত এবং একটি ক্লিনার কার্যসংক্রান্ত প্রস্তাবিত:

আপনার এনটাইটেলমেন্ট ফাইলটিতে অ্যাপ্লিকেশন-আইডেন্টিফায়ার এনটাইটেলমেন্টের জন্য কোনও মান না থাকলে কীচেন এপিআইগুলি সিমুলেটারে কাজ করতে ব্যর্থ হতে পারে। (28338972) কার্যক্রম: আপনার টার্গেটে ENTITLEMENTS_REQUIRED নামে একটি ব্যবহারকারী-সংজ্ঞায়িত বিল্ড সেটিং যুক্ত করুন এবং মানকে হ্যাঁ সেট করুন। এটি এক্সকোড তৈরি করার সময় স্বয়ংক্রিয়ভাবে একটি অ্যাপ্লিকেশন-সনাক্তকারী এনটাইটেলমেন্ট প্রবেশ করিয়ে দেবে।

মনে রাখবেন যে আমি যা চেষ্টা করেছি তা থেকে এটি কেবল এক্সকোড 8.1 এ কাজ করে। যদিও পাঠ্যটি আপনাকে একটি বিল্ড সেটিংয়ে বিভ্রান্ত করতে পারে, আপনার যা করা দরকার তা এটি আপনার স্কিমের আপনার পরিবেশ পরিবর্তনশীলগুলিতে যুক্ত করা।

এখানে চিত্র বর্ণনা লিখুন

এক্সকোড 8.2 এটি সমাধান করবে:

এক্সকোড 8.2 বিটাতে সমাধান হয়েছে - আইডিই কীচেন এপিআইগুলি সিমুলেটারে সঠিকভাবে কাজ করে। (28338972)


1
@ টিয়াগো কি আইওএস 10.1 সিমুলেটারে এক্সকোড 8.1 তে আপনার জন্য রিলিজ নোটগুলি থেকে এখনও কাজ করছে? আমি এই সেটিংটি যোগ করার চেষ্টা করেছি (লক্ষ্য হিসাবে ব্যবহারকারী-সংজ্ঞায়িত সেটিং এবং স্কিমের পরিবেশগত পরিবর্তনশীল হিসাবে উভয়) এবং আইওএস 10.1 সিমুলেটরগুলিতে চলার সময় আমি এখনও -34018 রিটার্ন মান পাই।
লোকভিদমজদা

3
@ গুয়ুইথমজদা, এখানেও একই। এখনও -34018 পেয়েছে এবং উভয় বিল্ড সেটিংস এবং পরিবেশের ভেরিয়েবল চেষ্টা করেছে।
কিথভুন্তর

আমার পক্ষে বিল্ড সেটিংসে বা সিয়েরার এক্সকোড 8.1 (8 বি 62) তে কোনও স্কিমের পরিবেশগত পরিবর্তনশীল হিসাবে কাজ করে না। আমি কিছু অনুপস্থিত করছি?
এভেজেনি

4
আমি এক্সকোড 8.2.1 ব্যবহার করছি এবং এই সমস্যাটি এখনও পুনরুত্পাদনযোগ্য। এছাড়াও, আমার প্রশ্ন হ'ল যদি আমার হোস্ট অ্যাপটি না থাকে এবং আমি ফ্রেমওয়ার্ক লক্ষ্য তৈরি করছি, তবে এই সমস্যাটি কীভাবে সমাধান করবেন?
ডিএসাহ

2
এই সমস্যাটি ফ্রেমওয়ার্ক টার্গেটগুলির জন্য ইউনিট পরীক্ষাগুলি প্রভাবিত করে কারণ এই ক্ষেত্রে এটি টেস্ট হোস্ট স্টাব হবে যার এনটাইটেলমেন্ট প্রয়োজন। আমরা সমস্যাটি সম্পর্কে সচেতন রয়েছি তবে এটি যদি আপনার জন্য অবরুদ্ধ হয় তবে দয়া করে একটি সদৃশ বাগ ফাইল করুন।
রুশবিশপ

10

যদি আপনার কাছে কোনও হোস্ট অ্যাপ নেই এমন একটি পরীক্ষার লক্ষ্যমাত্রা থাকে তবে এটি ঘটতে পারে। ঠিক করতে

  1. একটি ডামি হোস্ট অ্যাপ যুক্ত করুন: এখানে চিত্র বর্ণনা লিখুন

  2. স্বয়ংক্রিয় কোড সাইনিং সক্ষম করুন এবং একটি দল যুক্ত করুন:

এখানে চিত্র বর্ণনা লিখুন

  1. ক্ষমতাগুলিতে কীচেইন ভাগ করে নেওয়া সক্ষম করুন

এখানে চিত্র বর্ণনা লিখুন


5

ইমেল দিয়ে সাইন ইন করার সময়, একটি নতুন ব্যবহারকারী তৈরি করতে বা ফায়ারবেস ব্যবহার করে সাইন আউট করার সময় আমি একটি ত্রুটি পেয়েছি।

ত্রুটিটি ছিল:

ফিরাথ ত্রুটি ডোমেন কোড 17995

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


4

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

সমস্যাটি মনে হচ্ছে XCode- র জন্য নির্মিত অ্যাপ্লিকেশনটিতে যথাযথভাবে "অ্যাপ্লিকেশন-সনাক্তকারী" এনটাইটেলমেন্ট যুক্ত করার জন্য কমপক্ষে একটি এনটাইটেলমেন্ট থাকতে হবে। এই কারণেই কীচেইন ভাগ করে নেওয়া একটি সমাধান বলে মনে হয় তবে এটি কেবল পরোক্ষভাবে তাই: অন্য কোনও এনটাইটেলমেন্ট ভাল কাজ করে বলে মনে হয়।

আপনি এর .plistমতো একটি তৈরি করতে পারেন:

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE plist PUBLIC "-/  
<plist version="1.0">  
    <dict>  
        <key>get-task-allow</key>  
        <true/>  
    </dict>  
</plist>

এবং সেভ ইন বিল্ডিংয়ের অধীনে সেই ফাইলটির একটি পথ সরবরাহ করে

Code Signing->Debug->Simulater iOS 10 SDK->($SRCROOT)/your-path-to-file

পোস্টে যেমন বলা হয়েছে, এই এনটাইটেলমেন্টটি কেবলমাত্র ডিবাগারটিকে সংযুক্ত করার অনুমতি দেয়।


1

আমার একটি অনুরূপ সমস্যা ছিল, যদিও আমি ডিভাইসে চালানোর চেষ্টা করার সময় -34018 ত্রুটি পেয়েছি। আমি আইওএস 10.1 এর সাথে সিয়েরায় এক্সকোড 8.1 ব্যবহার করছি। আমি একটি টিমের সাথে কাজ করি এবং হঠাৎ এই সমস্যাটি ঘটে যখন আমরা প্রকল্প সেটিংসে "স্বয়ংক্রিয়ভাবে স্বাক্ষর পরিচালনা করতে" স্যুইচ করি। আমি যখন এটি বন্ধ করি এবং ম্যানুয়ালি আমার প্রোফাইল নির্বাচন করি, তখন সবকিছু ঠিকঠাক হয়। আমি আমার কীচেন থেকে আমার বিকাশকারী শংসাপত্রটি মুছতে পেরেছি, তারপরে "স্বাক্ষর করুন স্বয়ংক্রিয়ভাবে স্বাক্ষর পরিচালনা করুন" পুনরায় নির্বাচন করুন। পরবর্তী বিল্ডে, এটি আমার জন্য একটি নতুন স্বাক্ষর শংসাপত্র তৈরি করেছে এবং সবকিছু এখন ঠিকঠাক কাজ করে। আমি এখনও নিশ্চিত নই যে ম্যানুয়ালি সিলেক্ট করার সময় অন্যান্য সার্টিটি সূক্ষ্মভাবে কাজ করেছিল বলে সমস্যাটি কী কারণে সৃষ্টি হয়েছিল তবে এক্সকোড দ্বারা পরিচালিত হওয়ার সময় নয়। আশা করি এটি অন্য কারও জন্য এক ঘন্টা দীর্ঘ মাথাব্যথা থামাতে সহায়তা করে।


1

আমি কোনও এনটাইটেলমেন্ট সমন্বয় ছাড়াই এক্সকোড 11 এ এই সমস্যাটি সমাধান করতে সক্ষম হয়েছি।

আমি খুব সহজেই আমার ফ্রেমওয়ার্কের প্রকল্পে MyFrameworkTestsHostApp নামে একটি নতুন অ্যাপের লক্ষ্য যুক্ত করেছি।

তারপরে আমি মাইফ্রেমওয়ার্ক টেস্টস টার্গেটটি নির্বাচন করেছি এবং এর হোস্ট অ্যাপ্লিকেশনটিকে মাইফ্রেমওয়ার্কটেষ্টস্টেস্ট অ্যাপ হিসাবে বেছে নিয়েছি।



0

এই সমস্যাটি দ্রুত সমাধানের জন্য 3 টি পদক্ষেপ রয়েছে।

  1. আপনার প্রকল্পের ক্ষমতাগুলিতে কীচেইন ভাগ করে নেওয়ার চালু করুন।
  2. একটি প্রোফাইল সহ স্বয়ংক্রিয় বিধান নির্বাচন করুন
  3. আপনার কাস্টম এনটাইটেলমেন্ট বিকল্পটি এনটাইটেলমেন্ট.পল্লিস্টে সেট করা আছে তা নিশ্চিত করুন।

এটি যাদু করবে

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