Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«iOS. ΠŸΡ€ΠΈΠ΅ΠΌΡ‹ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 86

Автор Π’Π°Π½Π΄Π°Π΄ Нахавандипур

Π‘ΠΌ. Ρ‚Π°ΠΊΠΆΠ΅

Π Π°Π·Π΄Π΅Π» 8.2.

8.6. БовмСстноС использованиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… прилоТСниях

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ВрСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π²Π° Π²Π°ΡˆΠΈΡ… прилоТСния.

РСшСниС

Бохраняя Π΄Π°Π½Π½Ρ‹Π΅ вашСй связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΊΠ»ΡŽΡ‡ kSecAttrAccessGroup Π² словарС, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ SecItemAdd. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого ΠΊΠ»ΡŽΡ‡Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠ° доступа, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Entitlements (Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ) вашСго профиля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Об этом ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅.

ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅

НСсколько ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠΎΡ€Ρ‚Π°Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡƒΡΠ»ΠΎΠΆΠ½ΡΡ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ рассмотрим взаимодСйствиС всСго Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ описанныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ для любого количСства ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄Π²Π° прилоТСния ΠΌΠΎΠ³Π»ΠΈ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ трСбования.

1. ΠžΠ±Π° прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ подписаны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ профиля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, взятого с ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΏΠΎΡ€Ρ‚Π°Π»Π° для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎΠ΄ iOS.

2. ΠžΠ±Π° прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² своСм ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (Group ID). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (Team ID), Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ Apple. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ этот Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈ создании собствСнных ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

3. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ для сохраняСмого элСмСнта связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ kSecAttrAccessGroup. Π­Ρ‚Π° Π³Ρ€ΡƒΠΏΠΏΠ° доступа Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Ρ‚ΠΎΠΉ, которая ΡƒΠΊΠ°Π·Π°Π½Π° Π² вашСм ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ этой Π³Π»Π°Π²Π΅, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

4. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, сохранСнноС Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ сохранСно с Ρ‚Π°ΠΊΠΈΠΌ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ kSecAttrService, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ извСстно ΠΎΠ±ΠΎΠΈΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ прилоТСниям. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Ρ‚ΠΎΠ³ΠΎ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ сохранило Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Π²Ρ‹ сами написали ΠΎΠ±Π° прилоТСния, Ρ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅ этот ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, прСдоставив ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.

5. ΠžΠ±Π° прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π»Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ подписи ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Ρ„Π°ΠΉΠ» настроСк. plist, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² точности совпадаСт с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈΠ· сСкции Entitlements (Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ) вашСго профиля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π—Π°Ρ‚Π΅ΠΌ потрСбуСтся ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡƒΡ‚ΡŒ ΠΊ этому Ρ„Π°ΠΉΠ»Ρƒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Code Signing Entitlements (Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для подписи ΠΊΠΎΠ΄Π°) Π² настройках сборки. ВскорС ΠΌΡ‹ обсудим этот вопрос ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

6. Π₯отя ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ подписано профилями ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ (ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± этом говорится Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅), Π²Π°ΠΌ всС Ρ€Π°Π²Π½ΠΎ потрСбуСтся явно ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ Xcode ΠΎΠ± этих Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…. Вся информация ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ… β€” это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». plist, содСрТимоС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ я продСмонстрировал Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ этой Π³Π»Π°Π²Π΅.


<plist version="1.0">

<dict>

<key>application-identifier</key>

<string>F3FU372W5M.com.pixolity.ios.cookbook.SecondSecurityApp</string>

<key>com.apple.developer.default-data-protection</key>

<string>NSFileProtectionComplete</string>

<key>get-task-allow</key>

<true/>

<key>keychain-access-groups</key>

<array>

<string>F3FU372W5M.*</string>

</array>

</dict>

</plist>


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡŽΡ‡ keychain-access-groups. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΊΠ»ΡŽΡ‡Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ доступ Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: F3FU372W5M.*. Π’Π°ΠΌ потрСбуСтся Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΒ» свою Π³Ρ€ΡƒΠΏΠΏΡƒ доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠΎΠ΄Π° Π² Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠœΡ‹ напишСм Π΄Π²Π° прилоТСния. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΎΡΠΈΡ‚ΡŒ Π² связку ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠ°ΡΠ°ΡŽΡ‰ΡƒΡŽΡΡ Π³Ρ€ΡƒΠΏΠΏΡ‹ доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π±ΡƒΠ΄ΡƒΡ‚ двумя ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ. Однако ΠΎΠ½ΠΈ смогут совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ.

Π“Ρ€ΡƒΠΏΠΏΠ° доступа являСтся ΠΎΠ±Ρ‰ΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ соотвСтствуСт Π³Ρ€ΡƒΠΏΠΏΠ΅, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ доступ ΠΊ нашСй ΠΎΠ±Ρ‰Π΅ΠΉ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. РазумССтся, Π² вашСм случаС это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 8.0 этой Π³Π»Π°Π²Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠ· Π²Π°ΡˆΠΈΡ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… iOS-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ я Π·Π°Π΄Π°ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ настройки. Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… собствСнными.

β€’ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° com.pixolity.ios.cookbook.SecurityApp.

 Π“Ρ€ΡƒΠΏΠΏΠ° доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ F3FU372W5M.*.

 ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ созданный для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния.


А Π²ΠΎΡ‚ ΠΌΠΎΠΈ настройки для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ прилоТСния β€” Ρ‚ΠΎΠ³ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ значСния, сохранСнныС Ρ‚Π°ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

β€’ Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° com.pixolity.ios.cookbook.SecurityApp.

 Π“Ρ€ΡƒΠΏΠΏΠ° доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ F3FU372W5M.*.

 ΠŸΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ созданный для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния, Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ профиля, созданного для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния.


Бамая ваТная Π΄Π΅Ρ‚Π°Π»ΡŒ, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰Π°Ρ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰Π΅Π΅ связку ΠΊΠ»ΡŽΡ‡Π΅ΠΉ) ΠΎΡ‚ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ (ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ), β€” это ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свой ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° для сохранСния значСния Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния для считывания Ρ‚ΠΎΠ³ΠΎ самого значСния ΠΈΠ· связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Код ΠΎΡ‡Π΅Π½ΡŒ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Ρ‚ΠΎΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 8.2. Π Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΡ€ΠΈ сохранСнии Π΄Π°Π½Π½Ρ‹Ρ… Π² этой связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:


#import Β«AppDelegate.hΒ»

#import <Security/Security.h>


@implementation AppDelegate


β€” (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{


NSString *key = @"Full Name";

NSString *service = [[NSBundle mainBundle] bundleIdentifier];

NSString *accessGroup = @"F3FU372W5M.*";


/* Π‘Π½Π°Ρ‡Π°Π»Π° удаляСм ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли ΠΎΠ½ΠΎ сущСствуСт. Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ

ΠΈ Π½Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ SecItemAdd Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой, Ссли ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ

Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ окаТСтся Π² связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ */

NSDictionary *queryDictionary = @{

(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrService: service,

(__bridge id)kSecAttrAccessGroup: accessGroup,

(__bridge id)kSecAttrAccount: key,

};


SecItemDelete((__bridge CFDictionaryRef)queryDictionary);


/* Π—Π°Ρ‚Π΅ΠΌ запишСм Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² связку ΠΊΠ»ΡŽΡ‡Π΅ΠΉ */

NSString *value = @"Steve Jobs";

NSData *valueData = [value dataUsingEncoding: NSUTF8StringEncoding];


NSDictionary *secItem = @{

(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,

(__bridge id)kSecAttrService: service,

(__bridge id)kSecAttrAccessGroup: accessGroup,

(__bridge id)kSecAttrAccount: key,

(__bridge id)kSecValueData: valueData,

};


CFTypeRef result = NULL;

OSStatus status = SecItemAdd((__bridge CFDictionaryRef)secItem, &result);


if (status == errSecSuccess){

NSLog(@"Successfully stored the value");

} else {

NSLog(@"Failed to store the value with code: %ld", (long)status);

}


self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}


Код начинаСтся с Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для нахоТдСния ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎΡΡ элСмСнта с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ, ΠΈΠΌΠ΅Π½Π΅ΠΌ слуТбы ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ доступа ΠΊ связкС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. Если Ρ‚Π°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сущСствуСт, ΠΌΡ‹ удаляСм Π΅Π³ΠΎ ΠΈΠ· связки ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. ΠœΡ‹ Π΄Π΅Π»Π°Π΅ΠΌ это лишь для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Ѐункция SecItemAdd Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ с ошибкой, Ссли Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Сю ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ удаляСм ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Ссли ΠΎΠ½ΠΎ сущСствуСт) ΠΈ записываСм Π½ΠΎΠ²ΠΎΠ΅. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΉΡ‚ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ (ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ значСния), Π° Ссли ΠΎΠ½ΠΎ отсутствуСт β€” Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ слоТСн, Π° ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ выполняСм дСмонстрационноС ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, обойдСмся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ.

Однако ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ Π²Ρ‹ смоТСтС Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ это ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, связанныС с подписываниСм. Π§Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ элСмСнты, Ρ€Π΅Π³Π»Π°ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ подписываниС ΠΊΠΎΠ΄Π°, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги.

1. Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ°ΠΌΠΈ, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊ этой Π³Π»Π°Π²Π΅, Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ для извлСчСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, находящихся Π² вашСм ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

2. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½ΠΎΠ²Ρ‹ΠΉ. plist-Ρ„Π°ΠΉΠ» ΠΈ Π½Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ Entitlements.plist. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ содСрТимоС Ρ„Π°ΠΉΠ»Π° с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠ· профиля ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Π² точности ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π΅ΡΡ‚ΡŒ β€” Π² ваш Ρ„Π°ΠΉΠ» Entitlements.plist ΠΈ сохранитС.