Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
Π Π°Π·Π΄Π΅Π» 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 ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡΠ΅.