Jelajahi Sumber

update project

Marino Faggiana 6 tahun lalu
induk
melakukan
175f774af1
48 mengubah file dengan 4244 tambahan dan 21 penghapusan
  1. 2 1
      Cartfile
  2. 1 0
      Cartfile.resolved
  3. 25 0
      Carthage/Checkouts/UICKeyChainStore/.gitignore
  4. 100 0
      Carthage/Checkouts/UICKeyChainStore/.travis.yml
  5. 15 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/AppDelegate.h
  6. 27 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/AppDelegate.m
  7. 10 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements
  8. 38 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json
  9. 6 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Images.xcassets/Contents.json
  10. 38 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Info.plist
  11. 28 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/LaunchScreen.storyboard
  12. 13 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/ViewController.h
  13. 26 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/ViewController.m
  14. 16 0
      Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/main.m
  15. 9 0
      Carthage/Checkouts/UICKeyChainStore/LICENSE
  16. 158 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc
  17. TEMPAT SAMPAH
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/apple.cer
  18. 67 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/developer_id_app.p12.enc
  19. 188 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/iOS_Development.mobileprovision.enc
  20. 131 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/ios_developer.p12.enc
  21. 158 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/tvOS_Development.mobileprovision.enc
  22. 49 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Base.xcconfig
  23. 11 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Debug.xcconfig
  24. 8 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Release.xcconfig
  25. 33 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/TestHost.xcconfig
  26. 18 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Tests.xcconfig
  27. 23 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/UICKeyChainStore.xcconfig
  28. 23 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/libUICKeyChainStore.xcconfig
  29. 5 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Gemfile
  30. 19 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Gemfile.lock
  31. 397 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Rakefile
  32. 16 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Scripts/add_key.sh
  33. 9 0
      Carthage/Checkouts/UICKeyChainStore/Lib/Scripts/decode_cert.sh
  34. 34 0
      Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/Info.plist
  35. 11 0
      Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/TestHost.entitlements
  36. 44 0
      Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/main.m
  37. 26 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/Info.plist
  38. 0 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/UICKeyChainStore.h
  39. 0 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/UICKeyChainStore.m
  40. 24 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/Info.plist
  41. 51 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/UICKeyChainStoreForwardCompatibilityTests.m
  42. 1613 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/UICKeyChainStoreTests.m
  43. 94 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/v1.1.1-Lib/UICv1KeyChainStore.h
  44. 610 0
      Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/v1.1.1-Lib/UICv1KeyChainStore.m
  45. 32 0
      Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.podspec
  46. 10 0
      Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.xcworkspace/contents.xcworkspacedata
  47. 8 0
      Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  48. 20 20
      Nextcloud.xcodeproj/project.pbxproj

+ 2 - 1
Cartfile

@@ -1 +1,2 @@
-github "tilltue/TLPhotoPicker"
+github "tilltue/TLPhotoPicker"
+github "kishikawakatsumi/UICKeyChainStore"

+ 1 - 0
Cartfile.resolved

@@ -1 +1,2 @@
+github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "tilltue/TLPhotoPicker" "1.7.7"

+ 25 - 0
Carthage/Checkouts/UICKeyChainStore/.gitignore

@@ -0,0 +1,25 @@
+# OS X
+.DS_Store
+
+# Xcode
+build/
+*.pbxuser
+!default.pbxuser
+*.mode1v3
+!default.mode1v3
+*.mode2v3
+!default.mode2v3
+*.perspectivev3
+!default.perspectivev3
+xcuserdata
+*.xccheckout
+profile
+*.moved-aside
+DerivedData
+*.hmap
+*.ipa
+*.xcuserstate
+
+# Bundler
+.bundle
+vendor/

+ 100 - 0
Carthage/Checkouts/UICKeyChainStore/.travis.yml

@@ -0,0 +1,100 @@
+language: objective-c
+cache:
+  directories:
+  - Lib/vendor/bundle
+install:
+- (cd Lib && bundle install --path=vendor/bundle --binstubs=vendor/bin)
+before_script:
+- ./Lib/Scripts/decode_cert.sh || true
+- ./Lib/Scripts/add_key.sh || true
+script:
+- '(cd Lib && travis_retry bundle exec rake $ACTION)'
+branches:
+  only:
+  - master
+matrix:
+  include:
+  - osx_image: xcode10
+    env: ACTION=build
+  - osx_image: xcode10
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode10
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode10
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode9.4
+    env: ACTION=build
+  - osx_image: xcode9.4
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode9.4
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode9.4
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode9
+    env: ACTION=build
+  - osx_image: xcode9
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode9
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode9
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode8.3
+    env: ACTION=build
+  - osx_image: xcode8.3
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode8.3
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode8.3
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode8
+    env: ACTION=build
+  - osx_image: xcode8
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode8
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode8
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode7.3
+    env: ACTION=build
+  - osx_image: xcode7.3
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode7.3
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode7.3
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode7.2
+    env: ACTION=build
+  - osx_image: xcode7.2
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode7.2
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode7.2
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode7.1
+    env: ACTION=build
+  - osx_image: xcode7.1
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode7.1
+    env: ACTION='test:appletvsimulator'
+  - osx_image: xcode7.1
+    env: ACTION='test:macosx'
+
+  - osx_image: xcode7
+    env: ACTION=build
+  - osx_image: xcode7
+    env: ACTION='test:iphonesimulator'
+  - osx_image: xcode7
+    env: ACTION='test:macosx'
+env:
+  global:
+  - LANG=en_US.UTF-8
+  - LC_ALL=en_US.UTF-8
+  - secure: Fw0I2kQLC6j5BxOw7thOuGwTS6B6thpyM2xdF06Turek8TRGyzjU+QGtH1fdhJd03sDaX7LJTwn3wE2ffMTyfy/7uXGNroHJVfBz4yGjEhvL3z93FLWrLrXQqh1s+apWCJcwuE7kVqDUsjg4/HkIBq3nnGhS/nzlYNxacVx01oI=
+  - secure: lKWscex7qoKykLXdWZ830mxvnIz27Vz9T4ryb6Ets8H9C58DEWWz/dNqNm8cYIWmTb+xcvPybDwKmggIEvCvumSwI6XtJMfJviQSWpdOg2vIS1LiiILgDLRmpHL8Eb+FXr8MY7PYYc6rnIYp4HvuovnAIgjqUtLZ+vPuL4KEUV4=

+ 15 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/AppDelegate.h

@@ -0,0 +1,15 @@
+//
+//  AppDelegate.h
+//  Example-iOS
+//
+//  Created by kishikawa katsumi on 2015/01/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@end

+ 27 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/AppDelegate.m

@@ -0,0 +1,27 @@
+//
+//  AppDelegate.m
+//  Example-iOS
+//
+//  Created by kishikawa katsumi on 2015/01/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import "AppDelegate.h"
+#import <UICKeyChainStore/UICKeyChainStore.h>
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+    UICKeyChainStore *keychainStore = [UICKeyChainStore keyChainStore];
+    keychainStore[@"password"] = @"abcd1234";
+
+    NSLog(@"%@", keychainStore[@"password"]);
+
+    return YES;
+}
+
+@end

+ 10 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Example-iOS.entitlements

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>keychain-access-groups</key>
+	<array>
+		<string>$(AppIdentifierPrefix)com.kishikawakatsumi.Example-iOS</string>
+	</array>
+</dict>
+</plist>

+ 38 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,38 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 6 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Images.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

+ 38 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/Info.plist

@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>

+ 28 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/LaunchScreen.storyboard

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="11201" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="11161"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <scenes>
+        <!--View Controller-->
+        <scene sceneID="EHf-IW-A2E">
+            <objects>
+                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+                    <layoutGuides>
+                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
+                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
+                    </layoutGuides>
+                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                    </view>
+                </viewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="53" y="375"/>
+        </scene>
+    </scenes>
+</document>

+ 13 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/ViewController.h

@@ -0,0 +1,13 @@
+//
+//  ViewController.h
+//  Example-iOS
+//
+//  Created by kishikawa katsumi on 2015/01/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UIViewController
+
+@end

+ 26 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/ViewController.m

@@ -0,0 +1,26 @@
+//
+//  ViewController.m
+//  Example-iOS
+//
+//  Created by kishikawa katsumi on 2015/01/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import "ViewController.h"
+#import <UICKeyChainStore/UICKeyChainStore.h>
+
+@interface ViewController ()
+
+@end
+
+@implementation ViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+}
+
+- (void)didReceiveMemoryWarning {
+    [super didReceiveMemoryWarning];
+}
+
+@end

+ 16 - 0
Carthage/Checkouts/UICKeyChainStore/Examples/Example-iOS/Example-iOS/main.m

@@ -0,0 +1,16 @@
+//
+//  main.m
+//  Example-iOS
+//
+//  Created by kishikawa katsumi on 2015/01/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}

+ 9 - 0
Carthage/Checkouts/UICKeyChainStore/LICENSE

@@ -0,0 +1,9 @@
+The MIT License
+
+Copyright (c) 2011 kishikawa katsumi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 158 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/KeychainAccess_Tests.provisionprofile.enc

@@ -0,0 +1,158 @@
+U2FsdGVkX18WxFfapSdab5VH8V0ALvJ1p4DGQkV6PkLcteNXpYJVZYP7ibe0xSo8
+eEXjFyvV6Gx/O+FW90M40ejNOoG5qgTchrGR4mym4ECWHtaxijlIsr88FJrpBuYt
+RO3Pe9Ada/N2oqZjA9HSZ6v777VeCDuk/BAzcbPe9JbVISEyN7MiLMPC0A+6/cyx
+tabYCFt/8ROQv3Y4J9WA9De4sozTsynqnfpKHUXuEllN/2WaMLihqvUclXytu0g+
+uLi1e2Fl3Nb+apR3uztYfPNDHS6QvDXpUQKrtCchkt96nkgvpVqIkOaQHLcna+Jx
+oJuYwSFgOMf71PIuyTS0roah9/PrQhQEEH9LPzmbxFNWpc6GiNPSET9X1aXrLgOp
+mZY9w9cpSmjP7odjE1VHAAJWYD8PExCOST17096wOgf1kQQaykE4ec23Xo3BLbtJ
+njIi2Z3RVn7saH3IxvyTkgJIlUmAsmSCDbaHCyEZN2+g4SAWN8Ysd5hOPDW6r5Ft
+u75AsmvW1LRxMvvp3VQqHZ/9pv6erq5lnbMKWdAw5z1auCO6DGBUUMOwQqRRFvwT
+rKdKgGr1MNHoo1+zysY5RpRZzETqUZu2li46K3VO1aaTk6MIfpPeUpPQpFwWN3eE
+IVk5Bkjgm8yqWnPWquuw2bKavQZcJC9/e8ISPdpaqEoTV8ZFS7Qq16G6yWZSb6mP
+Cg4GWpIaRg+nGidx/xxZ6vVHCqcyK80961RFaFXlNofU0nEN5f7npGw1MvKJMSu3
+TOpAeaDp1XHqlk36XtEvfe+rHP9RzUBlqFYUYAFqHOlKA9dYwb2rRes5PNjdXisi
+OvxV4uGW9fy39NQustpTa1pRYmG1tjIvp59EdAAvc1XoKCa58ZkNaPb6m9u1Y3KR
+LHTZk3nJhoLflmdMt1z/brf0KfCq9NROniAlemfe7oT8AipxSRqIVwx+22IBh1yp
++aYJF0s1fThI3ViQMH3Jf+ybMVqP8co9BUVwh2GEZcOpwVBIW1Vtiz054Zi0ghxr
+DAyeB7OkpIqpWQKOQPH+GULZItK3GHLiEa/stwvABITggcbbXE+Ek4Qt4jk/2fzP
+mlIaDYn5cB7SHd6NGPZdPyQPAS9tz3LJF8Sc2IvlAjd7KTfX4+wCjUNz/vdktrdu
+6sHn6JoE0K5yip+bU1tp0xwTDhlDoTzJMGHl/PkVzhvte/RTBlNn0UPzH683qKM5
+34aefSH7TxdYhsFmF2to6d9jum9sYWDxT0Lyxc0apt8qIFDpQ/oukRg5FidUM9O1
+K4qr4mQ7Q8JxwIL+LekTLYjnSnMPuEdlkhetfN9lvXrwpTxAP8cpGND2usicXFVF
+t96NjO0rcT7pT0DZdcvyDj0yPrmusKSx2LPFtuniXp9XybGMFeCrkE3ITE1ui+ly
+5+txwDP3h237FpjWqCGez9JIqLRaJoHUX9paWQ1zwcqu//5TWnOEikjXENohIRhT
+ybDfm8rOwHv0EOdGI3UiOuPt+YsV66SWHJGcpE2mBH3ZT04sk7k/SR9vy4PWgzqS
+LaP4kFP9/cJPZWa2O1WForq3zCk4x1ytc0Xd3ndnHaznSzsEdYjFfUkOEh7cjTJK
+bp9prZT6TzMxtwsVlBIAEbpjZT6Nrb5PkYnhqiOEk3UmTne/yyOC4WF5ZwQi3sw7
+jh6ZcNt50YUAnIb6GOs469RLS+wC0XuP9sYLP8V0OdUv5sjrcicAF/wqZvq4qbOL
+fNyJeDK3Zctn7Xr9crNur0Koj8xNfubCRpOT315Ak+zuomljNS8YKr48mbup5iGK
+jbDKe3H6f36Gm7ZIpHXJe2i7zB1ZrrRo9sseIxzqYYRbRjGXio2xQiZFwLcvjZdD
+JbQBFkVr6P9DdRYsCPW17QuN+Wqr678RWe+jwxze03/td2ilqnsrOHkFXk0r/TDy
+KeyEaQbE0Gw9Tck2MV/AeI5smtwwVkF21Vo7YjRTOImnItDDwxn4tNBxdZ9rrNUs
+tlr+jr1u3Gbhe4flXtOtzC5AchvrU3Mu++lLV3Bn60GjyqPlRGmNlyyPkJVbsGzu
+HnWqzTRsNW0FngylBUx+3pIJMxF68MRgyFaHAY0guHG489p0KoySeYn8CdsEQLbf
+IC3GQHx+r3cHLHkQhJlx9pcTF+qqxakN0YJd7eiYljJ9jS3w+MAyhExjVzYjAhVT
+Ach/mVqdR7P37pUGU+GXN6fPMoZvYlNxIft2zpv2j8O3T5Z5xFXvP8mbgCrz1w0w
+PjpcOcG0T+uzbolUJ3fOHsLQp6YKfZJ1WKVqpBiLu2xmhzO9z0WqQtYJZ5L8lgq5
+bw6QFsKGvY6f08kLiHxHT+h7D8qQhe43yA7g6N2n3fVPxWU3KtYegY1SXO6UtIb8
+1yFy5KwoXZj1fQnb+O6XfNUtTkHoMwZFPxAGdSXzW6YqMGgeVbjrpYCpLR/4ljED
+vkj0NqNubyJa25UW5A/tVdMITlxeeyTaygrp882tCaP6/JnS65bBHvkzc2DSz9e7
+8gJ22sD2TctWqvGoFEux2i4kfflISINnqfkss7cyn6MaH+R37IqUR4mdJzPn5tw0
+MCk9R0mzp6NyR9xS1PO3QW3juNDeasXBKLcKPh4lU3/geJA2Po0FA9pr1lsAMFOB
+ltLsvk3HWdcB4+iFz8u+WrIANtvlLFfruFiqHe8n5YbFt63jh4CBqC1eto1Tfm1q
+kDgIqwRi8ZXGhVya4PzDHpynfymr5KFNBsGUoahG5F3m5QLFXcOQLTHldtkx3zNP
+gV4I68Gtkuw2RIDnruM8YEdZt2zLK5qXM2/6EecCba9cFN1AKHAUhcI9BKu3xFcP
+f6FM7+m8evVBFA4PPbH8IxHMux4svMFmluN9FxQK/aLu7kN6LIS5OporCp/s1wTl
+LWtAf6EUSPPQLvDqGZTDFvl5x4Fn6cPN23Y6kpYGuMf6zPEak/8yQJ9X3D4lqXfP
+k+SC2pu/ybVN2TtTNV/8YcTIbE1xF8/m4agtJjg9OTzAJT9MkgszSTK6S+R3ioaG
+I0ucixUlQWrGXN1LFWhgkcB3lQSz4EiHchKnYBNIqPpYpJcTU6cXcI4ybGWoBlwj
+1RDEw42O5PyyicxXFXAtwDjaUk3GqW+h4Bb6ti9wWFxf6DzlnvyfqkCrqnAHJWtT
+ZvbTkF1YPorVnKUY8hClRG0Fdv+wr8m5UrQgWEG548hwNqj0wvBkfeUqHPv9A6Eh
+sRtCtcTXNw+xRo8M4YLSN99gZFGCvIEbE2lPRF94X0RSXuQTMUbSw6M6N5rUBsKR
+ApeN27CwmuXYXl+9bvZxViVRSbICjqc9UrevXuK7KEhcwkP9LIozCB8gdy5m0S3Z
+TmQqwCpl3q6NYc7ubMzf42rCD/l+LDyavmyW3PQHYJlzrDvqRim/FjdSlyGoLFIw
+rzsVCxFCA+KmJ5ZKO6mNhg1GTyBXvKHRWOb2FvOTDAQotut5qPj4N9x7j8FXdvOQ
+h6OR1dzFJKlMuu2rr6aL80yK3lRLFokzHXF9JvOVPkbwRr49I+LnKl7r31NUDaBF
+8eKC8sR0tMLjHBPipASfisPtl8AqSmUOd1IUDR7y6wRu4NxFgyLq/MlyoWR2Cvze
+YuCZjAJjxUSfrqKCUOy8jfe4tj3v1K2nAAjw8n+fa4Ciacq8L3fGD2zaKLphRUKy
+d98tKvwlOiVIMyPd/Oq7caWi+NqWuGdX8v2kf1quagKC63PD2w+/E7rNriD0mUba
+QO7AXLeV6ZN0LLv64lzKysKE3CrB03s0KFI7faWZ2iJKyqLwt5Xm4VBSNRkCaZfp
+EivbwxGzVa27nFnhNC79ggW3gSIf5aNhnFr55CgKXOThwIktMjoEz0wg8dt1x5jk
+eNFzB8AA3eO83QUSEa+NJaRyIIu+L+h6MjdmTnGkBWR9fXIchzWvlIIlWnL6hbAr
+Xdsq5Rj4uGCg+5xboClc0SybVs0FerAOME8gtLZsDkeMcZ4OKIu11LmTHoz4JU1G
+0p7bU+dZlGXIvzFQUhQv5W1EOmsXS62NcJ1cdAL3PUA9rNQd9j68d1WrG84Px3fe
+/b2H9VOYNfDA+AdDyjXsiGsBE5IGtxHuZxG5+3nEHQgfXb9R9WuG37SdiGMdaPLm
+7OJg2Zkm5OSbh/3NWtw2W+0IRV2c3UQuQRmupGdwBhssA/k+QGC83SiFfiKWtNpQ
+0qwxGVGLE3nGl4Sma6f06ygHzy4hOEF7GBUpqekKmIoP6+epjvceLnSiTjqHKhRq
+t6ALmpicZ28aYrS5z7j/HqLiv01XmH+T4R6vg5hnAb897GuNVv/NogURPng8MG7Z
+1YM32YRp+OwP0FEQY9ye9ZudYKuzp/gG1j6/SEF9nUVQnCpxRRz7T3BWe2El+j7y
+VujRIcRP2D5bb7IMzGoHE0K1vr5YOW799qjkeLNcDaRewzWDW3YB3KwZW4aPEXpX
+Zs/M0DVLyPuIXyowtGm1mKOAFabcQhfMq5GpcSKWzGtTyGIGdBIhxUsy2QMKntZU
+iNz5myLb1YammZccIxWH18nF8Kr9QF4OFChIi4/NGdfYi8yl1FPTdkajOT5q8rZd
+psPZFcb3Zy5taROYUSEFAAGKF7RdH1hNcBS7seHLDNaEwCDGZ6QDn8Pvgal3Vzss
+fiZouPaKCYY0qFhtRLHEOZ9yHhytP7BGV1n9rMP5tQkvOciHmF/U+tqdttl4LTAg
+PPfGr1POmW6hGMZGWGj+UbJ+TpIuJnDx9qppUe6fSqVDLKPlSeVSynPUnHj7Fv5u
+f3eCbhp6aTA9Erjd+P1x2KAwDymw1u0VyVNMt+Xpg03gooJvCVuRfxXyXPABJeuN
+Z2iF/fSUdygkp3fIU/BB0J9QseR/DZjswbDPgMmRBOmb/+uVgVQq7JaS7HsOeSNJ
+Kz3PK24r8+X2SMPHgCPb+w1n0EPLVIp1vDtpPOXjiSqLDmqsTQFMnfl9ipy21ttP
+OoXPqoWtmgfyEdQnw2y6xfChnB2xu2OZ8PjXmiDTnOc3agJ7DdR0XxALHmIoJZ4H
+pMb8DgfPQBiBQ3Tkdr98SmFoRXfUpO0v+3s0RP32BRrL8afd+fWWLr4OIuAFg2Gn
+X7mx8T6LYHEcJCxuv3ITj2uYiApVstpUOE438Zc8Dl5trxk/+mQsKSqQ3MhxDolK
+sOAFyMksPkE8orBqQAQ7IgIUDWTzHDdhDaDnTWW2uLHmX2E+Uq2wsHFFXBBh1e4G
+h9IQktWe+38lLfLYdjN8nBVyi5hSJoX/vCiD0uoRbx/FGdjwFEoVHa6+xDQ34utH
+P6k6XIh9+qixz/709oywsmBhGeKgkTWRfCFkD/OioieyNUIPgarThFfenXguVw1S
+LGArMsiWcPRU4ZjwEPxNyUQgsj3ZO5V+qJlzV+GHObs0QRALm2vbtRjUd7Wi2Pq4
+gZJRPacBMWHWM8eT7S4iwdJDut/pZr9jwcRQw2PtuMfdO7v7BzktEKqwew+Y6NEA
+UK+2Vs0Yh8DdEw3ygTM5AQrHuUTAeQDwzebMBiwTSH57om17/0q6FRESWyvvri6G
+UocMjzskU8pgmDd3g5DBTsrIY40sF68Jo/O0H65d3F7JTg6NGMYldM5xReP63wro
+9ZXim8yqDVgTdXahMphIuJyNSjiQco72MDNq81tvKzx4DTwmYvNdof4XCqcsyfVI
+b5/UZ9LWDL7BItO6/G+G0uRQRuJYke2fY3kdkdF78yCkaiaJUcsd4Q+yeSZKqdLV
+zSUtpMAAG0W56tpo8eeuHRrutMiVF24TWbhyK9MNmu4kDbO2ROl4TaExALgrtZSI
+Rlcxmr+WjrdExoU+J6oFwJx2FW43HS/gn39uFklNlsUtvev8aFriglYk7yYpIqzf
+3nGLGA3B62c3qWuiW9repbZpJIuJgYhoWssj0nr1beTYORoGrRPhqhajsOcIIbX1
+79wbg4OJ8FMp1ecoM1jOA3HNY+XceJSUu64t66r3ik5uiWtY2QY8KPg3+Ep4PA3n
+3wia4ycqhc0VQ14O+d0HaSoTRbqDzWIx4yeXFjMhPh4UizzkS1o07juxQZ92kB12
+ZJr/C2oDJXX6GqxbTevUuoY/fgbSNP1Kz7Nev9WMkCpqJNf3fZAfEP+7QxYP/yt0
+eyCjbkqtIeZ83+NVpIee+7mbi++xe9T5EkpaCdEIUr8834SlB/bJWQEjjue4QAX9
+5QsqXfhVmdlJAHg8iqjQ1Sv7Cz3sJj3DdZshWeTk6oMCtWiJnJUHvzDaXC5RYiAE
+we2zVYroFDm0rN5HApHf1fNKFayzgmmgsT4MRbaMQKdNR3drLq5UTfbUjEuXVl5T
+zn4sCi7fYpz+cuUCqbi91lNYY5py/hSrNl+9xIdIgPV0qwF5+OXomNcQDc4CION3
+AWs8vUcFPt52uH5F2IFO168CCgHrLGtNW2dnGt/Tmd4+GaErY1ZTlfv/qUZABPaN
+X64Ya2cfVztw0gZCHsqGDLkjI43S5QBBb9ehFse5NUJYR/dVQN5+ctstkEBAJoAj
+Q7QC7bKOidrNd2LGbQexs9Ko7ZKTd1N13HhfH3GqHfG0TdOd1EVig+Ox1zkLykRK
+6pZgQB04kbIFWMbJ3GWSZzXxazcJF4ceNRQvgVIaoJwhiygAxzONcDupzjQQaaEN
+l+7ups3js06UNVCBP9tyPqtV8c5MMMvvWwiAzkT/DgwwLrjQBvWji0kHTg0ebj+K
+8WPrrnGJs6SvbH8Rt9bKjkid94/Wpm0fPnUkK6MFCnAREEKNSryCu9EGtH+HICOD
+XBAU5RAXzpm/RNyFthU8LWJv/ZWewHCmInFDxODQ9TmwQqgA/bt+xvCZtqy1swU0
+Pzpfg0Cm7pijkDY3Ro/y132O47plFEW1tfLkkWiURN2nRttca39wNJa7rBN16jdH
+EeAzH6HeYuXnX+84YiYnzWEiOIBMu7DHSgMCG+at0qoXQitrwcBYSaZNuJsDTMrX
+tF5jJraLd3rcOnFcYaXxi/7Pmt4y8bo2Z1vebJCVERhds/Cn54n9b5oH2jWleo2K
+REN1UUgwMT3Ab55AZtxt0HNwVPg8gPZpJKuYyEcHyQWxux3PccFBtggOEjWlKe25
+7tUcVlu9og9tsqb6TujceReBUmrTqmB07Ce2OBf32c+WEXs1N5EFOmqSoKQUarw1
+qK7zzugYxevAVO70tOWVq9x4i59zDVn/vbbA2uauq8Qetc5aavswbNmQRvO/7kcW
+VSH624oIDjvgEfwba+YJNPOFlq+NytMn4K/+lIB4vLnJgR2zz8qaEqniY59Cpguc
+25JdQbemxdxS2zCEZtPhqL2uOCMC0pXaO/fQx373rbXKS+YKJso9M6/dQXk3EYZM
+e4Vmo6paysjN2eM5hJBha+rNA3X+B6NvxUROx22ewhpBWSp8VuQuRZt6QJm4hMli
+DPnwyfQb0FuLnHja6v54Wj+MkUPX94Lg8IHyxnQOyO+dwxw/UKEfAzR8hs4l9ldp
+SGErlneKpL0rPK8l4ARZylsCHQzSATYuaSP/0V401Gp/Ph7iaSSagOvC6NHVoz+j
+n1qBYrFYdv4C7fYsz2LtoPf4oXIb7uc6J+3Zpg1hXMgx/CEpr1MuqXEAo4smVnEH
+7zJe7b2gnBhNoMiEl0HgWxypJM388B0SsZLi/JKjHMYKmeAe7X3y6FeVFTWd56Oz
+S+kaZjTx1BDa4Tv2ByaervxHR8W431hVwdJdQok/q6+hVX9SO6CD1eM8E4yVqqVj
+u17qg3OUyL+6UVInx0RcSo5jzqvVHbcfJOFBcIGpbD8HUhOYHjaehgxdKQkq1cQb
+CztU5v7k8M+at9PgGSMYaWchWd7LjdoCK8Y7HJ3heE2p/g737R3akmNuBg4H0vlW
+GuNCu456rUgOe4bAF03cEExwHf4I/BB2er3rs/ebd/9JBEKYiNvP1NEo2gethN+F
+J2NclLQv4iTv+P21IkOFfKBPHajad3qHTTXa0ZuH/ZF1jTA6lyyl+gmre436YtHu
+/kKS5PP6X/Tm2aifKv+j7id0kjWUdR6CT5QHecks/W1NuHKkaTcUeH0IdG4Ruie/
+uUivxoAEhFx1E4O6Oc+3WRoUTr5tXRP9pqR7dItAUAwHByNtePCBNj3r6D7EzjcZ
+VAn2xGkUkkhLuP8CAfwSZpNNhXdi5w7+RegktC5LrFi5J/lTXPdW6zoE2M1+Tb6Y
+YVnR0f/jjQTe6qZJpjjmiXaU6gpuJDrNOcI0r/4Woy+PmJEpD4fEM6bl8BtCu6WD
+S4JCaA1DEDnou7CzhLTIZUn1PBcc5FPlRx0cxYTgcdXZ/8nFUKABTqDxSahESoim
+wz/RuIBGCyyqJyR1I+vn+EFYIr4NdUVfm4EDHGKRhtf5saSk7mCJe5JBCFFSkXDk
+HIo61bm9HfbGCCYZl4kxKJJJAHoSbWoZUt1sZqDT4QOEv09gtnEZUt/cYoDnaES/
+Um3lsrIAyDPIEK6ggZdKzPROGBzMBqNICa/9tzybEuyHHOqHXIfzkvjvAzpTxpMW
+xlocQIe32XqHWqCFr05XTrf7EQYh5FosYeS1HAS9VIp0B0FrnEGuv5LSCqzm0ytj
+6+jJAIBgIqQ8H5Um3O2PQPooyrDdms8XqG0BeODoiu7fFmg340CxWC4oN9pmpj75
+GQae8atNVFaxcDEP6Yfr3RK6gLQ/Y2Co8G5T32dpRw+gAQFp8i3ZRZ0knpD7JlKl
+jor8XjeY7NdlMrmwDDLTMlrXqVPdYnWFK6tl/5tIcVIX1+r6elzcz9FAeHeLNnV5
+BaPirmQxRAP06nRUIs/SRuW8eU2nPCkYRTbykOCYhrtPW16qbukzXPFh5YhDMrhs
+43+2eAzcKzMdzRUxJr0aDEYGuOlBhqljrRMaD+l6DlLib1aNwXmh7njMuSc4miXm
+3StidS1H4gKaKVb16ZWtoz481Z2UQla3QPepi4Js3g5BAVddNlRoCSLNZOgnSt3F
+eN/1nxd7Ox/UyKppDPMHjdrmXlv6Plri6BI1aFASXqt2v0b/ajN5VsX4N8EG20US
+9g1qd6a377y7/YEaZVp9WyXKFVqDr8/SrFuh3z6o/azv4y+w0sIFcBPtkUYmBVCn
+uv/aPSSrAA7Ca6w0GJS5VQR7hxJJvjzBBMm/9YfnddHrOPeic/LOOj62YyN/WDMt
+xTCDys0/yIczRZoD1Q/MNtCrGCEWRIX38DKrAUC1FYFwiykWJAXZEIOw52jr3QFo
+Sc7eiKg1tvoP4bf4zuNFqDHngwImPyNcSW6KFlDwBjz2rz6xtBaZfEWIl8Dbglww
+iYNbCXjsDoDfj/rZS6g1Zw3JES0J5ZIITs4jPV0oxZVdIggeTMb35LEUuplH5nk0
+EwXcKSoDLs5e+7XuFwXJaZ0wuhAwy56jmzXQGSz74Q0rydDOWIkhKK6gyv6y8bWY
+tkyIJ0qFGuM+kVRjl9mjo4hyl0PZvJQp4XDv9BzToMtoWOlbAOt+JMnwmxnrNWnG
+XQU3hRymBBiGFnGa+6JuYRV0FxDYz30YSWItGGr3nC9no6TIkR7Xnl4tVPvkQedA
+1MrpFReVmgSDOwOrcWOXgpMqmBGnD471L+y8X9O1LgoeFvll7d/LYAcnHm4SmSM/
+11ptgLgqdSlLkVGrGGescxdNGetfe8Vn4MVojfwBZdI+dTRZ3FvlhUing5FG84c1
+m+vBaC02RxifSRALm/kthtjbRN0790WPeQnjSPNEo8MAWlMYY+TPiVkFPkHytEei
+Kps1DGw/FSJ0r3xBow3d++jeW9n4ZMHS5gW1s6/ACjeQpUire7oy3aufXHcfgjJG
+K52DJrCDBf1w5LqkGubZXXjwc4TxznXquDOi1oMcAlTMXh5yRfvWxm45b1YV/pWb
+vt0ffmM+CDc7umQ7EVmtU34D8tAISu4a/Vddu2KROST7mfoxNw++Uso8cwU0Jkjr
+BFOczostmNjiDbMORPNYVU1U9E4MyWUtIhyhGmoVuQT7/h/Fh/tZ+LxKSFhuO2p2
+n2BAkZoomC4MhY6lrVfmsbmcSmrfkrr5vTIvlleY60TneJUXQ768XeGft/5aFjqR
+lL+7wMUhiPtgU9y45uQgFtm0HNNlu9l9zR86NCIDskZrbtuhfoLj+CCIyeo2bz4Y
+m1nn1kcLs46WQmS7a7XSHQ==

TEMPAT SAMPAH
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/apple.cer


+ 67 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/developer_id_app.p12.enc

@@ -0,0 +1,67 @@
+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

+ 188 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/iOS_Development.mobileprovision.enc

@@ -0,0 +1,188 @@
+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

+ 131 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/ios_developer.p12.enc

@@ -0,0 +1,131 @@
+U2FsdGVkX1/A9JqBXQY1nHIgQ22pp/7/eETLbgBOMJgqmSZP79CPn1brO+WrYJe4
+4UcW1ZYnJYyIz+tINiie2XGQqLExiFh9cgI/aJRvKt4Aq0B7VZ/wk1bVdvmbjojX
+U6zradMwdAhTPEzDz1lRhAcvIJgTLxDTCiJWxPakAEuDSbjUHhAqANmCKoPtOLlE
+zP04L6orkUn3ZFUvanr1UcTy47FOYCrOqFSkHr11RNN+akIN8pZrH6FJNRQYYMc+
+SNyswtwMT/m0GBPk7vN5qzuqhtrW8hpxFlAf/OWZK2zD88myR36K7eonZHddgTe8
+JHxPTbhx09P8FdqB5ZRnhAIeidSBvVosfs58G7Mdm1XVP71HTy43qC0IBaGbLJkN
+h2ngsZDHVLapX3Si0faHDxaM0OVHs7sD2r/eiB1mzXmV07WiT8AVPgskZkMgW0eI
+R+t0JnDkicR26IGQSJ5+rDwcwUIoSNZVB7EqcYOOT0HpDhUbEDM6C0iTGLEA237g
+ECc71XVkIf7dxudnn8k0eDGw2+OHv+opi54MSks1KImo4HiWCeHT46RVyNemVCwT
+1iijESZv1PmKAbg8yLwQDLXKDIJyIHIuILiAsCsG1yNkCb6lE4wGKVSMpxMhE1hL
+eW9dTLcl1tr/9JAIJFP1MYSZVy6JIBbz9IKGRO4ZmTimRCR8cyGSQNa0btg7hzkY
+C+4fFeUA/ZkkTeufIy/v7V9u6vsMuWU4hsdQTXzgrnougxLOVGQpbmf58nV/YHhl
+6JZ4n1EQnLFxFP/a1kEBfA6keG2dRjTSvm/HIemFI57KozuQonE7T4RXNY2vvjyh
+HrEjR7pI1JJe5SXRwPqCKuF/ZyqamQ70XfmiLNmNAS4GgeWYG2mCQcj7/lcJ5bUK
+tjMSC85vCGbTl0Bt7NGl6yDXzciRUeOX4q86SGTlrWmgk5y4+Z2DjDgscGblJYU4
+9QoDSNiqVvrF1NnSc9VwHCjytfXaB9+76yDCgkSBRbUhbykHZIzbOfNQ6R7EQlKP
+RZOr7Z5BqMqw//yF/wBEv1PMa0fhCvvyzrLmKGzfqljswNZtoLpHHjFvCVjSPdQD
+HcmWWPxDA6nfpP3c01pEZdAQYKE3tfpgqXjymS08x2MXwRLL5MCZerXGEOgtjB8G
+ui31XiapDlEa6YCjVpO8567sEzBrsBeIadQGDA/LOE9xHrm4dHsL3TERclLp75nS
+8Tc7WY+rmePN8hXCODEsf5CV0z5VQJdX7hYhrAilEkjU0vwObdvObVgWz+Ti5Gvm
+T9LU7pLc0TkaqI+lcwMQ3VG8Dp3BZSxxHyihy53Ug6JS/gofkRgHxG3rB13z/nby
+avswN81lLXvoAGTb0iVuLkVaKgxamNujLUVbXV+IhiyhqpqOXI2X9HYIMwi4Gjvp
+Q2Z/djJFoxXOiqSGVpngKa65eDATJ9OpurKrBcJ+s35KdXiiIzEbH8C5Z4Cdx1KB
+mpzJW/6KzZzNLe+h9NE82j2CNPFqT24Nq1k2tPXPtq1UX0E1RKFI9txxj6FREkg4
+LtIvflqiBt7mX5eROpHqqrvKDr87/P84rGoDaV1SZMYKRqCeq8FOtTnS9hIKqxJ9
+zkchIlCaM8S1Hkc1J+F/6ZXHet7rUE7fnO1FjXdEUWyUbsJPpVl6rTHkZaOtvfiD
+kXvkm7PoWX7NeLGDLFHa1Si6GPsYR2ww48jnKHpRuRp6llbcQ7TJz0ZSr2MdY5kv
+TxQm5XeONaBvn5cNBFHQ275K50/jO1M+IC6LL7IUBjvbdoBlLdBd09YQT5CDg3Qr
+kIQxqFFQDmDslDnl7OlwimM+A10PN2z0tBtNZud1n/ZbbL5H5eoZSkrRgrMDvzVV
+JAuJ6diyegT75ZKCi+vR37kpb0hx1gP3EkDyuuja+BaMBhSz7GqOmWsHuetSeVE/
+GPzrI8dKN+xrUerPniAiqmzbn7YfCiog+PMVgdacy02RdIYUL7jB6qQAvJhAB85b
+sfWPhgL2O1UiuS4WxtTtaStgsoai6jApBElkoCMDQJLIHaARMHjhpih2nffqGrm5
+dsu7RliE++6YFw3c6+saUaRuT65+FqL8S/NNxd3Mqq09UY8FhotVaTY1IcTCGx6y
+m25gJVSRssfus4YA6ySphabzwrUsfz12PoMvYEZvYSapHuhk3YlMZaXHS/QMfFy3
+7qiZ7+yWH+4+jicY9GsCuqm6jFUpEKK3B8ljlNqQCGltPt8FEWf6iv4XCuPc9EOS
+wQHWuRntuH2k8b9ikslk2rkBN4TG6SOcgVqGaz6cInKyPiWocrAzUnUBLeH4j+iz
+EOiFdz6xCqyQu0qK1NgeuBfw604dJtRMJSlv7RuPuJXLqcDzJG27YY7O1IUpM020
+P+gGG+49Tcm0Xjcg193E5A7BxMMo963WUjfnk9QetS61+7/QYOyxrOYv+D/WxC/Z
+0ej/diD836XsaZ5rczSL3kVMYcoiypeteBS9mFJQmLydJVKtPfZDYfoJDX7QvZ6o
+CArXjdZ/yM8SZ1g7AfqGyiCoSM+qqo2b1Kqnw6pnveL8lxHjLuUlOifqUUslw2ON
+30XmRo7wbAos1cKKQRcHaxiwx/PrVvuL1wQ2bJ5Jcp/RN1lJeMiV9VmzcloIJINN
+8n3K9gNlIK85wR/XyXpkRD+xfqJwyTKEadQ0IN0iFG1WwybVj2ydXJehgKCJymjI
+bZQy/8/DNgXIIXhOZpgDwdwe1rXI9VIRBXutwICcCxC/dwIModHF9TDr0h2UpoAH
+NA0wiTgCJsGNQdg0wQHGMhC07qvG59gDZ/QL5DZ/IZr1GChku51OkX/I+hLLeiIk
+qXlcbGfAF+tKVaJrCr1L4cvMfD/tfOKjkDJq+7BW7+gNM2LuNdRyY/J/8bLU8y99
+/lEcY4uTg1ZIfJEyT3c4gG5OSrqKEYtOxAMmYEsv6FYsmDCfVfu0HvCXXb3rrNSR
+9yKDs9jdQe/8IuEOq4X8jrR/4gSxE4VctCF+6WPg8UuM+ncveE3+bgG6Dw4H8/yK
+9p5YUB3kAHHbV6+68qPnDiS9oEYowiWfYZEUvc4vZzif/BXHbmJ0zs9U20O8UfBs
+ZhevvTIUQyZC/gAs6nD5TnPfZATtmV1FPFHabi5UVMhmbyvCKZu4MC2ybYDj651/
+yrAqXehphsqD0aBSijqtEhLPtvF4BDC5HxU4y2fWIR3Waum/ZHy5biRWsoei5Qr9
+1uqX/zAoFGXC8UswmOE9hy1LhtIBz9vI7R7QgzZEKm+D1MHrcQMnFRo56LZsBOLA
+5hGzX3nU3hWjKWyEt/G+ISpSIxx5LnWE2HkEqNAhbo8ag+yonLhE5JT5EczLBuRd
+OZyxUriETWmSSxU36ymxwnt2L1Wo5n5XiaKUsBV6JCdt2KS9n3AQFjFX7Qutctop
+SiLdk9aniXGVQxmpt7gtxEgXyab//DVfgvk/4cVl89hlrYVxSj2Eaw3glcidnsmP
+rJUtUqMMAEu+Z6OfH98kMZQEmCsDvTWEKu6bu+U3UNGqsR/Ckxv6LyCUypDFXa+u
+g9s3r3pTQDHjRqUnHWJbEyzjOuHs9s1jH+kOGHbkz3o23ivc89dvkSUJHjiYzE8I
+g38NRfs6VfLqPtDGRm68WUsRd0w9dssS3iuIztNAV3zNnRN6EGEL//imrvwMC4Hj
+ZyXgHLdEmlbkLknAQfb1dhXj1kdH0BOhu+OJ9RZdkq4YEmQw94Ga5gcJUT/B0JM0
+3+E05Y+FPDzTOikFVaR0AQP1ZvdVVoqLcfzAlYmJzw3tWq81HExdoyxwZuANPyyE
+JbILwU9sETfdm/OoL5w7DL11fS8OogLw4Nrr3sEIEuT+IjMd+nnSqDOTzPoInOjM
+FmuNVHoaT71rmHzFbJu+Ej6d2NdmO4SEehu+0J4pVNYRBrsY8DtSfeJ+webyiipF
+7DnVcCtne/OubjkucB1lwwQN3j5EWaGJuK7+/5nOeo98tj9NWMXkjapQJp3RDlXl
+x2q2+6O8uYBAAVgiBUwOBg77ID48Q9W8cml7FViv+RPXiPoEbkqFHIO0I4h4cfdV
+oGUzQysWJIpXt4B+0bKDDgxaiqHI5rBVJOXEYzTFhZ1Ipa90vpgf6RESLsPGvoUJ
+1fytDK1ClE67cw0ft3fZrNPvYsFrbNy6pT6j5o76TxKPBsCmll+M4bnizXyv26Ac
+Dz0gUN8ynXcUT/22CepTreJmvdOyps/EucbKYtMpPp9EMBZqLGd0OfDkuFIywHRF
+SUg5bE0UllyICI8/17MdCKDda5dzXdi3OeEwKQrdQUxp1Kzsbd7wBDqecVU60v2S
+kXZIucNjwiWu8CGSOOdmBQMQlTJZ/uk6UpqI+npSrckHWgSGjdJcOrtaLiBKeasR
+D6Td0LohKPzlI/bDhUD9YvaCaqEpTb+FQo9OapdH46eB8olJiZpoc38vyGLFuDnv
+AHC32vTV5r3ZB0lmgahT82mfoL6M9kOIHjgZKZxX56fjZCh0S7ahPsSBMUC5YtAn
+rKaIbSPYlBEg7sbGvxcWPnRAgKfUww2kWXXH/UbtGRguL51T0EaBSDzyB1M/qYpg
+4sqI8Cbr8RiTH7RrV0Fp56P7UzrsiVs115IdpGcZaaciu1IwKMx6w6E1sbZaKytc
+iVCzVUl0UGUYmC5atrMBEf68Z74BFBDyl73fru5WafGxTXMBL10YMvDPbyDmjaKG
+2logR0ZbUtKztJuA00SJ7EaYn25RaiHzTTqT2CPGf7w1wobbxrEb0MDKSj+0srRq
+nPsdhLpbn2YF2lDqwNEfUsQY33B/FAoOaBaRMFXtIOWEEFp1Nw/EIW6/WK2vJJXV
+HoN/WrNNCCwWGxcJnzwwZjVaXUF6G/fo/TV7Q3VzVj9QE5s2DG3gUuGC1JROTqUw
+vgjf/owUNuxfOXXbO8GpFkyfG9qWuDSY9HcDOVvakUlP9BfSHWO6QsvomrQyZx8Q
+SVx4a92SCC4mNK3s2kzvN1bd2CJFguk7YaXFaivyqgpjMLHMBueRV0hA5YYrgoAu
+S5LaQ0htOjaCgQqD35cOr7GigerBJFc6yQ5FAmPg2VDleld1iLOr1D7bDwlN5cdK
+EIz3YM0bi8qYjkKqqDzy8MDb+7i18OKM21o+Mh7kxNl7tU+ULz8pCK4glD3AzGJv
+FJqiwVN0tmFHAXazOJwDYxyM5LHlSLcrWyyG7aE7281cZHHMfJe5bUwMNZd0bDtP
+BdNY/xv6g8QW2nJt7ER3pR04P1xDy0leC86ZQ9tUQPaU//Sf9PdYHniAVvNiTS8H
+5ol+FchTmfsfbnz5ck16jOVfIc8U+KOUShmCmgQ2oXPeVBRX0+mH39h9PSqDC+ny
+UaOj9gntyBWpEncmANw2jheuc0J+Z+vBHRJsENtWRZ/vVufoGIuJrpSWMHyPtZke
+pxLmVl/hiI4douKJdHfg1SUQF5l9+o2wXs3RjQm5Aq+r5W58tINn6FortqKV1yHq
+44Z+42Vd1uUkJLUY+TufNmrp3xl9aT1rx3zKD75zoxOcRw4OQvYGoaoobyg4M5K5
+KN5j0vXyNp4KSGX+33L9macArpgWfM1S6A2iqenUoZjzSpm+7mwVM+9ABua19NRe
+1x/LTZDyC8M3aCDfi73Et0mHL7onFr+uAIdWk8bsAuPh6OcfXxDO1iBgHHyNu+XW
+OUnXn60MCxUvpjaOy7YiqJu+/RY1AyfAc0thqe9zrexJC/SIgAM7AjKnMkw0qASI
+biQllknlrpnIJ3HFgDuNcKZqtGbseLfXRFoSganE2dN4tE+olpFH4OlAC61IMleb
+N4rznupMQHOPpX3+BQ56R3yVPZpIG4LJZLn4fw3+6b/LhKbU7hhf3CQnwbK4LDjR
+p2G23H0KAP6jDUMZoi3+zF08q5HAdfyxhz2KgK/yUqf8yXAA+3e6fPbo6pzM+9gR
+3u/CZzBajx12Okn12/8cIVWy7j9zglsj11XmNgfffRXbF7iQHxKqYdDwk3Qlljaa
+TXeg4R+ricLE5EcSugD9g/Bhs6m86hnPvzm/YH4SXf5cmaMDbyLe3ra/KmU+Mtbo
+BSF1FGQ3GQUaSsm6VMx8tq4ODW/v6phhEt/kKeYvIPm3NbZcF1LwPEwd9B8PqZIn
+joOHunjFkv+AVWo0GOJYY7xXmHuot/GA7WirqgyM6rnsJR0p5R/1xlBaTpAbh9Tl
+BFTNnh/NdF62G76AUHI1DLJjcj036tfq4LQmLjw2/YMOsBWBOYrQP/UljwqXzONV
+vzjKe1/ks77bFKfGLzerVu0TofmGtzJUn7uD7MCtmSTUaqu9Mx98WDIT7I1nHeZb
+/CyPNZt40VN1ZPs7hDzjapHqJrmAPFcVi2NgSTRlwH+8XN4fiyXYwigvilsZtIcv
+T93QTNKwJU0Dk2I6fhakcC/pgqkio3nVBDjZrw3UgTETUrJFx9hMUDUPVY3VhW7l
+bDWoAaUZeRruJgtN+CfUewma1t41q9Bi1hLHn0XUhPM7Tyjhkoy3nqpODKvMVZwf
+5+qK9IzpjqzhWkqdwql3BykAzPtJUpQ3NoizESH8i7vj6PIfSHV748YvP3GgqnD/
+9Z6OMShRhD5wtwsFGC5NoQrsfNyLdJTIcDm2+hecJ6Ddpnw/GZp4P5f1DYCpmqDd
+hGFKxPU7bhMjmvdyB8qtamirnPtEbcU0LhSmFRLUY71f6YQanSWLlYGt8qZ3Q1KQ
+6GGURZANCp7quttPTZcCDs9AWRHtBjehHvCk4mLIosMzGVPCW1ofVuupMsOENEW7
+iujRbRuGX8rzkvVkTDkLWBcZmtclHu7iwp49RUHocdKvRCj6DhkNmtr+9GXEGD4T
+uX2ErO4tw1e041Z5cZS1z5qDpvH957JkO/sFv1d+EyksiSDhpbBNHuAOJUsQYQ02
+BrFDLGIilDCOZ1QtaVOjj6SRqQPF9puy3rF6MTPiaFRGQyrBIYdIub44vI2t+I5F
+bGWt4vl6O4NoT9RaI2Ol0hHIPhn+FaEtrsrRc6Fy2XBSw5jhSr7aLvKBly6nOsQ1
+pfUTQyNtEoywpJCBFdmlGfmvq7FE3PpX/6fdyewhLn2VChjR2PGUbEeIhM1pXeyV
+rqN1M1GsrQqaIAla8A8RGn5qQayTLwSCkvocEIm8YnRsE0lN0jG78sNhNfx2VbSv
+pWQcpI0h3g6ZfjkWfesZpO5n1bDvtYpG8QmERKoX/r1AypjjXevoPILDvAuk7vra
+vW4VAJ696XepghDYVewE+gs+qBlwOT4b++mkaH5+RS5mGhTDZQwxBEvVyG/sVpS6
++d4uCD8C+3tNIpuvpXcbpr1zV6lZj3wCixCQSHnMZJlcVJETnrNkuFfJ5LMIppL9
+Q5181YFXDN0rEIm3WqmP3IJeJhF9Dj7M0rHhlIJk6PvTi5bs72C0tRLCIiQqOcfi
+q/ojo6s/3g0rCBRm+/Fz8AxB6wbqxI6x+0Rw703WwTXU/vshqNl3iJljzhno1PWf
+2E1z78vYSt5rmAZ+5QAnFzerb/XziYHiQdUfPMY66TpyLIrziZGoW1QEENHT8RwV
+lrBdLbPkXcMRFcE6f1jedrWnRAuE6zq/0EgYXUxIk/+nnW/oul6RdbMBxviNAe8U
+1gii6ZHoaWoTxROoOQYB0P23Rjf8eJ3r5c2+nZmqsXLDwNeKdlX+uSsS6pLFh7DJ
+PWzD44AcMXIjv8Z4uB8pPVbpAbH9oda3GKPZcYQuJ4scScy3USAOYK77T4SY3Y8r
+YtTmTD02z3+FDzihUWEoZuWebOSSIgtw6cGMHXrew6oLun9MMeGeUsaJbF9Fm1dA
+yGQFHHJU/QRkEsI7UE+jf7st9+gvwoMpW1WNWonO/LWRidMZmtaXxLny/+Rn9jzf
+2IYajsbxieXjL3ab196D9HWJZhGUpNNaCD3rIBP/5gmiCb5PZVQTFm7XDN/evb90
+ZBAgkKl+5VJoJpQLSOwNQ04D/WMSEkdfK9OmCNY/5ZrOq5YnOodwb0s0aSgpZ9vZ
+6TO5Eh5KUekbzOERSYTT7gsHGVzHGcB+cA2ezUTb1MqCM6XPQew09aHJRv30LJML
+CH5z2DduTEsiio+pdg8qvgMh+QJTxiTXOH3tEi/TLMgbkasO9R3qWatvkVaX8fqH
+pzLUvXNGfwonVgCkQ6S8IaUG4J488A/eUZmF88ATuse2k7vFxiaYtM4qFfcM6Bpc
+U594M87s1N/lbShteyE1QRxkhCXrlX/xFo5RXwCqVegQ0Fenjb5Usvf5eKRW4zgE
+SDnOmso/z2yXrIJ4sSJdPbrkCiMCq2gd/qe6kGxC53ibGHSQz85kgxXBZFMSIh2/
+sM53Di/oIR+zvimoqOIbWKLwBn02oO41sNE0qvsV2C8fy1SVOy6cG8AX6D93PI3f
+hfJJH1uvIO2vkPfr+fxvTQ==

+ 158 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Certificates/tvOS_Development.mobileprovision.enc

@@ -0,0 +1,158 @@
+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

+ 49 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Base.xcconfig

@@ -0,0 +1,49 @@
+ALWAYS_SEARCH_USER_PATHS = NO;
+CURRENT_PROJECT_VERSION = 1;
+ENABLE_STRICT_OBJC_MSGSEND = YES;
+CLANG_ANALYZER_NONNULL = YES;
+CLANG_CXX_LANGUAGE_STANDARD = gnu++0x;
+CLANG_CXX_LIBRARY = libc++;
+CLANG_ENABLE_MODULES = YES;
+CLANG_ENABLE_OBJC_ARC = YES;
+CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+CLANG_WARN_BOOL_CONVERSION = YES;
+CLANG_WARN_COMMA = YES;
+CLANG_WARN_CONSTANT_CONVERSION = YES;
+CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+CLANG_WARN_EMPTY_BODY = YES;
+CLANG_WARN_ENUM_CONVERSION = YES;
+CLANG_WARN_INFINITE_RECURSION = YES;
+CLANG_WARN_INT_CONVERSION = YES;
+CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+CLANG_WARN_NULLABLE_TO_NONNULL_CONVERSION = YES;
+CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+CLANG_WARN_STRICT_PROTOTYPES = YES;
+CLANG_WARN_SUSPICIOUS_MOVE = YES;
+CLANG_WARN_SUSPICIOUS_MOVES = YES;
+CLANG_WARN_UNREACHABLE_CODE = YES;
+GCC_NO_COMMON_BLOCKS = YES;
+GCC_C_LANGUAGE_STANDARD = gnu99;
+GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+GCC_WARN_UNDECLARED_SELECTOR = YES;
+GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+GCC_WARN_UNUSED_FUNCTION = YES;
+GCC_WARN_UNUSED_VARIABLE = YES;
+
+VERSION_INFO_PREFIX = ;
+VERSIONING_SYSTEM = apple-generic;
+
+CODE_SIGN_IDENTITY = ;
+DEVELOPMENT_TEAM = ;
+
+MACOSX_DEPLOYMENT_TARGET = 10.9;
+IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+WATCHOS_DEPLOYMENT_TARGET = 2.0;
+TVOS_DEPLOYMENT_TARGET = 9.0;

+ 11 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Debug.xcconfig

@@ -0,0 +1,11 @@
+#include "Base.xcconfig"
+
+BITCODE_GENERATION_MODE = marker;
+COPY_PHASE_STRIP = NO;
+ENABLE_TESTABILITY = YES;
+GCC_DYNAMIC_NO_PIC = NO;
+GCC_OPTIMIZATION_LEVEL = 0;
+GCC_PREPROCESSOR_DEFINITIONS = DEBUG=1 $(inherited);
+GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+MTL_ENABLE_DEBUG_INFO = YES;
+ONLY_ACTIVE_ARCH = YES;

+ 8 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Release.xcconfig

@@ -0,0 +1,8 @@
+#include "Base.xcconfig"
+
+BITCODE_GENERATION_MODE = bitcode;
+DEBUG_INFORMATION_FORMAT = dwarf-with-dsym;
+COPY_PHASE_STRIP = YES;
+ENABLE_NS_ASSERTIONS = NO;
+MTL_ENABLE_DEBUG_INFO = NO;
+VALIDATE_PRODUCT = YES;

+ 33 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/TestHost.xcconfig

@@ -0,0 +1,33 @@
+SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator;
+TARGETED_DEVICE_FAMILY = 1,2,3;
+
+COMBINE_HIDPI_IMAGES = YES;
+COPY_PHASE_STRIP = NO;
+INFOPLIST_FILE = TestHost/Info.plist;
+PRODUCT_NAME = $(TARGET_NAME);
+CLANG_MODULES_AUTOLINK = NO;
+ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+
+PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.KeychainAccess.TestHost;
+
+CODE_SIGN_ENTITLEMENTS = TestHost/TestHost.entitlements;
+
+CODE_SIGN_IDENTITY[sdk=iphone*] = iPhone Developer;
+CODE_SIGN_IDENTITY[sdk=macosx*] = Developer ID Application;
+PROVISIONING_PROFILE_SPECIFIER[sdk=iphone*] = iOS Development;
+PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*] = KeychainAccess Tests;
+
+DEVELOPMENT_TEAM = 27AEDK3C9F;
+
+OTHER_LDFLAGS[sdk=iphone*] = -framework UIKit;
+OTHER_LDFLAGS[sdk=appletv*] = -framework UIKit;
+OTHER_LDFLAGS[sdk=macosx*] = -framework Cocoa;
+
+PRINCIPAL_CLASS[sdk=iphone*] = UIApplication;
+PRINCIPAL_CLASS[sdk=appletv*] = UIApplication;
+PRINCIPAL_CLASS[sdk=macosx*] = NSApplication;
+
+LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks;

+ 18 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/Tests.xcconfig

@@ -0,0 +1,18 @@
+SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator appletvos appletvsimulator;
+
+COMBINE_HIDPI_IMAGES = YES;
+FRAMEWORK_SEARCH_PATHS = $(inherited);
+INFOPLIST_FILE = UICKeyChainStoreTests/Info.plist;
+PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier);
+PRODUCT_NAME = $(TARGET_NAME);
+
+TEST_HOST[sdk=iphone*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/TestHost;
+TEST_HOST[sdk=appletv*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/TestHost;
+TEST_HOST[sdk=macosx*] = $(BUILT_PRODUCTS_DIR)/TestHost.app/Contents/MacOS/TestHost;
+
+LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+
+DEVELOPMENT_TEAM = 27AEDK3C9F;

+ 23 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/UICKeyChainStore.xcconfig

@@ -0,0 +1,23 @@
+COMBINE_HIDPI_IMAGES = YES;
+DEFINES_MODULE = YES;
+DYLIB_COMPATIBILITY_VERSION = 1;
+DYLIB_CURRENT_VERSION = 1;
+DYLIB_INSTALL_NAME_BASE = @rpath;
+APPLICATION_EXTENSION_API_ONLY = YES;
+INFOPLIST_FILE = UICKeyChainStore/Info.plist;
+INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks;
+PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier);
+PRODUCT_NAME = $(PROJECT_NAME);
+SKIP_INSTALL = YES;
+
+SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator watchos watchsimulator appletvos appletvsimulator;
+TARGETED_DEVICE_FAMILY = 1,2,3,4;
+
+ENABLE_BITCODE[sdk=iphone*] = YES;
+ENABLE_BITCODE[sdk=watch*] = YES;
+ENABLE_BITCODE[sdk=appletv*] = YES;
+
+LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;

+ 23 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Configurations/libUICKeyChainStore.xcconfig

@@ -0,0 +1,23 @@
+COMBINE_HIDPI_IMAGES = YES;
+DEFINES_MODULE = YES;
+DYLIB_COMPATIBILITY_VERSION = 1;
+DYLIB_CURRENT_VERSION = 1;
+DYLIB_INSTALL_NAME_BASE = @rpath;
+APPLICATION_EXTENSION_API_ONLY = YES;
+EXECUTABLE_PREFIX = lib;
+INFOPLIST_FILE = UICKeyChainStore/Info.plist;
+INSTALL_PATH = $(LOCAL_LIBRARY_DIR)/Frameworks;
+PRODUCT_BUNDLE_IDENTIFIER = com.kishikawakatsumi.$(PRODUCT_NAME:rfc1034identifier);
+PRODUCT_NAME = $(PROJECT_NAME);
+SKIP_INSTALL = YES;
+
+SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator watchos watchsimulator appletvos appletvsimulator;
+TARGETED_DEVICE_FAMILY = 1,2,3,4;
+
+MACOSX_DEPLOYMENT_TARGET = 10.6;
+IPHONEOS_DEPLOYMENT_TARGET = 8.0;
+
+LD_RUNPATH_SEARCH_PATHS[sdk=macosx*] = $(inherited) @executable_path/../Frameworks @loader_path/../Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=iphone*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=watch*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;
+LD_RUNPATH_SEARCH_PATHS[sdk=appletv*] = $(inherited) @executable_path/Frameworks @loader_path/Frameworks;

+ 5 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Gemfile

@@ -0,0 +1,5 @@
+source 'https://rubygems.org'
+
+gem 'rake'
+gem 'xcpretty'
+gem 'xcjobs'

+ 19 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Gemfile.lock

@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    rake (12.1.0)
+    rouge (2.0.7)
+    xcjobs (0.10.0)
+    xcpretty (0.2.8)
+      rouge (~> 2.0.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  rake
+  xcjobs
+  xcpretty
+
+BUNDLED WITH
+   1.15.4

+ 397 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Rakefile

@@ -0,0 +1,397 @@
+require 'xcjobs'
+
+xcode_version = `xcodebuild -version`.split("\n").first.scan(/\d+/).join('.')
+
+if xcode_version.start_with?('10')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPhone X,OS=12.0'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch Series 4 - 40mm,OS=5.0',
+        'name=Apple Watch Series 4 - 44mm,OS=5.0'
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 4K,OS=12.0'
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('9.4')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPhone 7,OS=11.4',
+        'name=iPhone 8,OS=11.4',
+        'name=iPhone X,OS=11.4'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=4.0',
+        'name=Apple Watch - 42mm,OS=4.0'
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 4K,OS=11.0'
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('9')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPhone 6s Plus,OS=11.0',
+        'name=iPhone SE,OS=11.0',
+        'name=iPhone 7,OS=11.0',
+        'name=iPhone 8,OS=11.0',
+        'name=iPhone X,OS=11.0',
+        'name=iPad Air 2,OS=11.0',
+        'name=iPad Pro (9.7-inch),OS=11.0',
+        'name=iPad Pro (12.9-inch),OS=11.0'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=4.0',
+        'name=Apple Watch - 42mm,OS=4.0'
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 1080p,OS=11.0'
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('8.3')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPhone 5,OS=10.3.1',
+        'name=iPhone 5s,OS=10.3.1',
+        'name=iPhone 6,OS=10.3.1',
+        'name=iPhone 6s Plus,OS=10.3.1',
+        'name=iPhone SE,OS=10.3.1',
+        'name=iPad Air 2,OS=10.3.1',
+        'name=iPad Pro (9.7-inch),OS=10.3.1',
+        'name=iPad Pro (12.9-inch),OS=10.3.1'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=3.0',
+        'name=Apple Watch - 42mm,OS=3.0'
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 1080p,OS=10.0'
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('8.0')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPhone 5,OS=10.0',
+        'name=iPhone 5s,OS=10.0',
+        'name=iPhone 6,OS=10.0',
+        'name=iPhone 6s Plus,OS=10.0',
+        'name=iPhone SE,OS=10.0',
+        'name=iPad Air 2,OS=10.0',
+        'name=iPad Pro (9.7 inch),OS=10.0',
+        'name=iPad Pro (12.9 inch),OS=10.0'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=3.0',
+        'name=Apple Watch - 42mm,OS=3.0'
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 1080p,OS=10.0'
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('7.3') || xcode_version.start_with?('7.2')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPad 2,OS=8.1',
+        'name=iPad Air,OS=8.1',
+        'name=iPhone 4s,OS=8.1',
+        'name=iPhone 4s,OS=8.3',
+        'name=iPhone 4s,OS=8.4',
+        'name=iPhone 4s,OS=9.0',
+        'name=iPhone 4s,OS=9.2',
+        'name=iPhone 5,OS=8.1',
+        'name=iPhone 5s,OS=8.1',
+        'name=iPhone 6,OS=8.1',
+        'name=iPhone 6,OS=8.2',
+        'name=iPhone 6,OS=8.3',
+        'name=iPhone 6,OS=8.4',
+        'name=iPhone 6,OS=9.0',
+        'name=iPhone 6,OS=9.2',
+        'name=iPhone 6 Plus,OS=8.1',
+        'name=iPhone 6 Plus,OS=8.2',
+        'name=iPhone 6 Plus,OS=8.3',
+        'name=iPhone 6 Plus,OS=8.4',
+        'name=iPhone 6 Plus,OS=9.0',
+        'name=iPhone 6 Plus,OS=9.2'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=2.0',
+        'name=Apple Watch - 42mm,OS=2.0',
+        'name=Apple Watch - 38mm,OS=2.1',
+        'name=Apple Watch - 42mm,OS=2.1',
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 1080p,OS=9.0',
+        'name=Apple TV 1080p,OS=9.1',
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('7.1')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPad 2,OS=8.1',
+        'name=iPad Air,OS=8.1',
+        'name=iPhone 4s,OS=8.1',
+        'name=iPhone 4s,OS=8.3',
+        'name=iPhone 4s,OS=8.4',
+        'name=iPhone 4s,OS=9.0',
+        'name=iPhone 4s,OS=9.1',
+        'name=iPhone 5,OS=8.1',
+        'name=iPhone 5s,OS=8.1',
+        'name=iPhone 6,OS=8.1',
+        'name=iPhone 6,OS=8.2',
+        'name=iPhone 6,OS=8.3',
+        'name=iPhone 6,OS=8.4',
+        'name=iPhone 6,OS=9.0',
+        'name=iPhone 6,OS=9.1',
+        'name=iPhone 6 Plus,OS=8.1',
+        'name=iPhone 6 Plus,OS=8.2',
+        'name=iPhone 6 Plus,OS=8.3',
+        'name=iPhone 6 Plus,OS=8.4',
+        'name=iPhone 6 Plus,OS=9.0',
+        'name=iPhone 6 Plus,OS=9.1'
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=2.0',
+        'name=Apple Watch - 42mm,OS=2.0',
+      ]
+    elsif platform == 'appletvsimulator'
+      [ 'name=Apple TV 1080p,OS=9.0',
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+elsif xcode_version.start_with?('7.0')
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPad 2,OS=8.1',
+        'name=iPad Air,OS=8.1',
+        'name=iPhone 4s,OS=8.1',
+        'name=iPhone 4s,OS=8.3',
+        'name=iPhone 4s,OS=8.4',
+        'name=iPhone 4s,OS=9.0',
+        'name=iPhone 5,OS=8.1',
+        'name=iPhone 5s,OS=8.1',
+        'name=iPhone 6,OS=8.1',
+        'name=iPhone 6,OS=8.2',
+        'name=iPhone 6,OS=8.3',
+        'name=iPhone 6,OS=8.4',
+        'name=iPhone 6,OS=9.0',
+        'name=iPhone 6 Plus,OS=8.1',
+        'name=iPhone 6 Plus,OS=8.2',
+        'name=iPhone 6 Plus,OS=8.3',
+        'name=iPhone 6 Plus,OS=8.4',
+        'name=iPhone 6 Plus,OS=9.0',
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=2.0',
+        'name=Apple Watch - 42mm,OS=2.0',
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+else
+  def destinations(platform: 'iphonesimulator')
+    if platform == 'iphonesimulator'
+      [ 'name=iPad 2,OS=8.1',
+        'name=iPad Air,OS=8.1',
+        'name=iPhone 4s,OS=8.1',
+        'name=iPhone 4s,OS=8.4',
+        'name=iPhone 5,OS=8.1',
+        'name=iPhone 5s,OS=8.1',
+        'name=iPhone 6,OS=8.1',
+        'name=iPhone 6,OS=8.2',
+        'name=iPhone 6,OS=8.4',
+        'name=iPhone 6 Plus,OS=8.1',
+        'name=iPhone 6 Plus,OS=8.2',
+        'name=iPhone 6 Plus,OS=8.4',
+      ]
+    elsif platform == 'watchsimulator'
+      [ 'name=Apple Watch - 38mm,OS=2.0',
+        'name=Apple Watch - 42mm,OS=2.0',
+      ]
+    else
+      [
+        'platform=OS X,arch=x86_64'
+      ]
+    end
+  end
+end
+
+def schemes
+  ['UICKeyChainStore', 'libUICKeyChainStore']
+end
+
+if xcode_version.start_with?('7.0')
+  def supportedPlatforms
+    ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator']
+  end
+elsif xcode_version.start_with?('6')
+  def supportedPlatforms
+    ['macosx', 'iphoneos', 'iphonesimulator']
+  end
+else
+  def supportedPlatforms
+    ['macosx', 'iphoneos', 'iphonesimulator', 'watchos', 'watchsimulator', 'appletvos', 'appletvsimulator']
+  end
+end
+
+def configurations
+  ['Debug', 'Release']
+end
+
+desc "build for all platforms"
+task :build do |t|
+  supportedPlatforms
+    .product(configurations)
+    .map { |platform, configuration| Rake::Task["build:#{platform}:#{configuration.downcase}"] }
+    .map(&:invoke)
+end
+
+namespace :build do
+  schemes.each do |scheme|
+    supportedPlatforms.product(configurations).each do |platform, configuration|
+      XCJobs::Build.new("#{platform}:#{configuration.downcase}") do |t|
+        t.project = 'UICKeyChainStore'
+        t.scheme = scheme
+        t.sdk = platform
+        t.configuration = configuration
+        if xcode_version.start_with?('10')
+          if platform == 'iphonesimulator'
+            t.add_destination('name=iPhone X,OS=12.0')
+          elsif platform == 'watchsimulator'
+            t.add_destination('name=Apple Watch Series 4 - 44mm,OS=5.0')
+          elsif platform == 'appletvsimulator'
+            t.add_destination('name=Apple TV 4K,OS=12.0')
+          end
+        elsif xcode_version.start_with?('9.4')
+          if platform == 'iphonesimulator'
+            t.add_destination('name=iPhone 7,OS=11.4')
+          elsif platform == 'watchsimulator'
+            t.add_destination('name=Apple Watch - 42mm,OS=3.2')
+          elsif platform == 'appletvsimulator'
+            t.add_destination('name=Apple TV 4K,OS=11.0')
+          end
+        elsif xcode_version.start_with?('9.0')
+          if platform == 'iphonesimulator'
+            t.add_destination('name=iPhone 6,OS=11.0')
+          elsif platform == 'watchsimulator'
+            t.add_destination('name=Apple Watch - 42mm,OS=3.1')
+          elsif platform == 'appletvsimulator'
+            t.add_destination('name=Apple TV 1080p,OS=11.0')
+          end
+        elsif xcode_version.start_with?('8.0')
+          if platform == 'iphonesimulator'
+            t.add_destination('name=iPhone 6,OS=10.0')
+          elsif platform == 'watchsimulator'
+            t.add_destination('name=Apple Watch - 42mm,OS=3.0')
+          elsif platform == 'appletvsimulator'
+            t.add_destination('name=Apple TV 1080p,OS=10.0')
+          end
+        elsif xcode_version.start_with?('7.3') || xcode_version.start_with?('7.2')
+          if platform == 'iphonesimulator'
+            t.add_destination('name=iPhone 6,OS=9.2')
+          elsif platform == 'watchsimulator'
+            t.add_destination('name=Apple Watch - 42mm,OS=2.1')
+          elsif platform == 'appletvsimulator'
+            t.add_destination('name=Apple TV 1080p,OS=9.1')
+          end
+        end
+        t.build_dir = 'build'
+        t.hide_shell_script_environment = true
+        t.formatter = 'xcpretty -c'
+        if ENV['CI']
+          t.add_build_setting('CODE_SIGN_IDENTITY', '')
+          t.add_build_setting('CODE_SIGNING_REQUIRED', 'NO')
+        end
+      end
+    end
+  end
+end
+
+namespace :test do
+  supportedPlatforms
+    .select { |platform| platform == 'macosx' || platform == 'iphonesimulator' || platform == 'appletvsimulator' }
+    .each do |platform|
+      task platform do |t|
+        configurations.each do |configuration|
+          destinations(platform: platform)
+            .map { |destination| Rake::Task["test:#{platform}:#{configuration.downcase}:#{destination}"] }
+            .map(&:invoke)
+        end
+      end
+    end
+end
+
+namespace :test do
+  supportedPlatforms
+    .select { |platform| platform == 'macosx' || platform == 'iphonesimulator' || platform == 'appletvsimulator' }
+    .product(configurations)
+    .each do |platform, configuration|
+      destinations(platform: platform).each do |destination|
+        XCJobs::Test.new("#{platform}:#{configuration.downcase}:#{destination}") do |t|
+          t.project = 'UICKeyChainStore'
+          t.scheme = 'UICKeyChainStore'
+          t.sdk = platform
+          t.configuration = configuration
+          t.add_destination(destination)
+          t.coverage = true
+          t.build_dir = 'build'
+          t.hide_shell_script_environment = true
+          t.after_action do
+            build_coverage_reports()
+            puts `curl -L https://codecov.io/bash | bash -s -- -f 'coverage.txt'`
+          end
+        end
+      end
+    end
+end
+
+def build_coverage_reports()
+  project_name = 'UICKeyChainStore'
+  profdata = Dir.glob(File.join('build', '/**/Coverage.profdata')).first
+  Dir.glob(File.join('build', "/**/#{project_name}")) do |target|
+    output = `xcrun llvm-cov report -instr-profile "#{profdata}" "#{target}" -arch=x86_64`
+    if $?.success?
+      puts output
+      `xcrun llvm-cov show -instr-profile "#{profdata}" "#{target}" -arch=x86_64 -use-color=0 > coverage.txt`
+      break
+    end
+  end
+end

+ 16 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Scripts/add_key.sh

@@ -0,0 +1,16 @@
+#!/bin/sh
+
+security create-keychain -p travis build.keychain
+security default-keychain -s build.keychain
+security unlock-keychain -p travis build.keychain
+security set-keychain-settings -t 3600 -l ~/Library/Keychains/build.keychain
+
+security import ./Lib/Certificates/apple.cer -k ~/Library/Keychains/build.keychain -T /usr/bin/codesign
+security import ./Lib/Certificates/ios_developer.p12 -k ~/Library/Keychains/build.keychain -P $PASSPHRASE -T /usr/bin/codesign
+security import ./Lib/Certificates/developer_id_app.p12 -k ~/Library/Keychains/build.keychain -P $PASSPHRASE -T /usr/bin/codesign
+
+security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k travis build.keychain
+
+mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
+cp ./Lib/Certificates/*.mobileprovision ~/Library/MobileDevice/Provisioning\ Profiles/
+cp ./Lib/Certificates/*.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/

+ 9 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/Scripts/decode_cert.sh

@@ -0,0 +1,9 @@
+#!/bin/sh
+
+CERT_DIR="./Lib/Certificates"
+FILES=('ios_developer.p12' 'developer_id_app.p12' 'iOS_Development.mobileprovision'\
+       'tvOS_Development.mobileprovision' 'KeychainAccess_Tests.provisionprofile')
+
+for file in ${FILES[@]}; do
+  openssl aes-256-cbc -k "$ENCRYPTION_SECRET" -in "$CERT_DIR"/"$file".enc -d -a -out "$CERT_DIR"/"$file"
+done

+ 34 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/Info.plist

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+	</array>
+	<key>NSPrincipalClass</key>
+	<string>$(PRINCIPAL_CLASS)</string>
+</dict>
+</plist>

+ 11 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/TestHost.entitlements

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>keychain-access-groups</key>
+	<array>
+		<string>$(AppIdentifierPrefix)com.kishikawakatsumi.KeychainAccess.TestHost</string>
+		<string>$(AppIdentifierPrefix)shared</string>
+	</array>
+</dict>
+</plist>

+ 44 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/TestHost/main.m

@@ -0,0 +1,44 @@
+//
+//  main.m
+//  TestHost
+//
+//  Created by kishikawakatsumi on 9/19/16.
+//  Copyright © 2016 kishikawa katsumi. All rights reserved.
+//
+
+#import <TargetConditionals.h>
+
+#if TARGET_OS_WATCH
+
+// watchOS doesn't support testing at this time.
+int main(int argc, const char *argv[]) {
+}
+
+#elif TARGET_OS_IPHONE || TARGET_OS_TV
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
+
+@implementation AppDelegate
+@end
+
+int main(int argc, char *argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
+
+#else
+
+#import <Cocoa/Cocoa.h>
+
+int main(int argc, const char *argv[]) {
+    @autoreleasepool {
+        return NSApplicationMain(argc, argv);
+    }
+}
+
+#endif

+ 26 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>FMWK</string>
+	<key>CFBundleShortVersionString</key>
+	<string>2.1.1</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>NSPrincipalClass</key>
+	<string></string>
+</dict>
+</plist>

+ 0 - 0
Libraries external/UICKeyChainStore/UICKeyChainStore.h → Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/UICKeyChainStore.h


+ 0 - 0
Libraries external/UICKeyChainStore/UICKeyChainStore.m → Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStore/UICKeyChainStore.m


+ 24 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/Info.plist

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>BNDL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+</dict>
+</plist>

+ 51 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/UICKeyChainStoreForwardCompatibilityTests.m

@@ -0,0 +1,51 @@
+//
+//  UICKeyChainStoreForwardCompatibilityTests.m
+//  UICKeyChainStore
+//
+//  Created by goro-fuji on 2/17/15.
+//  Copyright (c) 2015 kishikawa katsumi. All rights reserved.
+//
+
+#import <XCTest/XCTest.h>
+
+#import "UICKeyChainStore.h"
+#import "UICv1KeyChainStore.h"
+
+@interface UICKeyChainStoreForwardCompatibilityTests : XCTestCase
+
+@end
+
+@implementation UICKeyChainStoreForwardCompatibilityTests
+
+- (void)setUp
+{
+    [super setUp];
+
+    [UICKeyChainStore setDefaultService:@(__FILE__)];
+    [UICv1KeyChainStore setDefaultService:@(__FILE__)];
+
+    [UICKeyChainStore removeAllItems];
+}
+
+- (void)tearDown
+{
+    [UICKeyChainStore removeAllItems];
+
+    [super tearDown];
+}
+
+- (void)testReadV1DataFromV2
+{
+    [UICv1KeyChainStore setString:@"http://example.com/" forKey:@"url"];
+
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"url"], @"http://example.com/");
+}
+
+- (void)testReadV2DataFromV1
+{
+    [UICKeyChainStore setString:@"http://example.com/" forKey:@"url" genericAttribute:@"url"];
+
+    XCTAssertEqualObjects([UICv1KeyChainStore stringForKey:@"url"], @"http://example.com/");
+}
+
+@end

+ 1613 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/UICKeyChainStoreTests.m

@@ -0,0 +1,1613 @@
+//
+//  UICKeyChainStoreTests.m
+//  UICKeyChainStoreTests
+//
+//  Created by kishikawa katsumi on 2014/06/22.
+//  Copyright (c) 2014 kishikawa katsumi. All rights reserved.
+//
+
+#import <XCTest/XCTest.h>
+#import "UICKeyChainStore.h"
+
+@interface UICKeyChainStore (Private)
+
+- (CFTypeRef)protocolTypeObject;
+- (CFTypeRef)authenticationTypeObject;
+- (CFTypeRef)accessibilityObject;
+
+@end
+
+@interface UICKeyChainStoreTests : XCTestCase
+
+@end
+
+@implementation UICKeyChainStoreTests
+
+- (void)setUp
+{
+    [super setUp];
+    
+    [UICKeyChainStore setDefaultService:@""];
+    
+    [UICKeyChainStore removeAllItems];
+    
+    [[UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"] removeAllItems];
+    [[UICKeyChainStore keyChainStoreWithService:@"Twitter"] removeAllItems];
+
+    [[UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://example.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS] removeAllItems];
+    
+    [[UICKeyChainStore keyChainStore] removeAllItems];
+}
+
+- (void)tearDown
+{
+    [super tearDown];
+}
+
+#pragma mark -
+
+- (void)testGenericPassword
+{
+    {
+        // Add Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        [keychain setString:@"kishikawa_katsumi" forKey:@"username"];
+        [keychain setString:@"password_1234" forKey:@"password"];
+        
+        NSString *username = [keychain stringForKey:@"username"];
+        XCTAssertEqualObjects(username, @"kishikawa_katsumi");
+        
+        NSString *password = [keychain stringForKey:@"password"];
+        XCTAssertEqualObjects(password, @"password_1234");
+    }
+    
+    {
+        // Update Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        [keychain setString:@"katsumi_kishikawa" forKey:@"username"];
+        [keychain setString:@"1234_password" forKey:@"password"];
+        
+        NSString *username = [keychain stringForKey:@"username"];
+        XCTAssertEqualObjects(username, @"katsumi_kishikawa");
+        
+        NSString *password = [keychain stringForKey:@"password"];
+        XCTAssertEqualObjects(password, @"1234_password");
+    }
+    
+    {
+        // Remove Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        [keychain removeItemForKey:@"username"];
+        [keychain removeItemForKey:@"password"];
+        
+        XCTAssertNil([keychain stringForKey:@"username"]);
+        XCTAssertNil([keychain stringForKey:@"password"]);
+    }
+}
+
+- (void)testGenericPasswordSubscripting
+{
+    {
+        // Add Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+        
+        keychain[@"username"] = @"kishikawa_katsumi";
+        keychain[@"password"] = @"password_1234";
+        
+        NSString *username = keychain[@"username"];
+        XCTAssertEqualObjects(username, @"kishikawa_katsumi");
+        
+        NSString *password = keychain[@"password"];
+        XCTAssertEqualObjects(password, @"password_1234");
+    }
+    
+    {
+        // Update Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+        
+        keychain[@"username"] = @"katsumi_kishikawa";
+        keychain[@"password"] = @"1234_password";
+        
+        NSString *username = keychain[@"username"];
+        XCTAssertEqualObjects(username, @"katsumi_kishikawa");
+        
+        NSString *password = keychain[@"password"];
+        XCTAssertEqualObjects(password, @"1234_password");
+    }
+    
+    {
+        // Remove Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+        
+        keychain[@"username"] = nil;
+        keychain[@"password"] = nil;
+        
+        XCTAssertNil(keychain[@"username"]);
+        XCTAssertNil(keychain[@"password"]);
+    }
+}
+
+#pragma mark -
+
+- (void)testInternetPassword
+{
+    {
+        // Add Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        [keychain setString:@"kishikawa_katsumi" forKey:@"username"];
+        [keychain setString:@"password_1234" forKey:@"password"];
+        
+        NSString *username = [keychain stringForKey:@"username"];
+        XCTAssertEqualObjects(username, @"kishikawa_katsumi");
+        
+        NSString *password = [keychain stringForKey:@"password"];
+        XCTAssertEqualObjects(password, @"password_1234");
+    }
+    
+    {
+        // Update Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        [keychain setString:@"katsumi_kishikawa" forKey:@"username"];
+        [keychain setString:@"1234_password" forKey:@"password"];
+        
+        NSString *username = [keychain stringForKey:@"username"];
+        XCTAssertEqualObjects(username, @"katsumi_kishikawa");
+        
+        NSString *password = [keychain stringForKey:@"password"];
+        XCTAssertEqualObjects(password, @"1234_password");
+    }
+    
+    {
+        // Remove Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        [keychain removeItemForKey:@"username"];
+        [keychain removeItemForKey:@"password"];
+        
+        XCTAssertNil([keychain stringForKey:@"username"]);
+        XCTAssertNil([keychain stringForKey:@"password"]);
+    }
+}
+
+- (void)testInternetPasswordSubscripting
+{
+    {
+        // Add Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        keychain[@"username"] = @"kishikawa_katsumi";
+        keychain[@"password"] = @"password_1234";
+        
+        NSString *username = keychain[@"username"];
+        XCTAssertEqualObjects(username, @"kishikawa_katsumi");
+        
+        NSString *password = keychain[@"password"];
+        XCTAssertEqualObjects(password, @"password_1234");
+    }
+    
+    {
+        // Update Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        keychain[@"username"] = @"katsumi_kishikawa";
+        keychain[@"password"] = @"1234_password";
+        
+        NSString *username = keychain[@"username"];
+        XCTAssertEqualObjects(username, @"katsumi_kishikawa");
+        
+        NSString *password = keychain[@"password"];
+        XCTAssertEqualObjects(password, @"1234_password");
+    }
+    
+    {
+        // Remove Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        keychain[@"username"] = nil;
+        keychain[@"password"] = nil;
+        
+        XCTAssertNil(keychain[@"username"]);
+        XCTAssertNil(keychain[@"password"]);
+    }
+}
+
+#pragma mark -
+
+- (void)testSetDefaultService
+{
+    NSString *serviceName = @"com.kishikawakatsumi.UICKeyChainStore";
+    [UICKeyChainStore setDefaultService:serviceName];
+    XCTAssertEqualObjects(serviceName, [UICKeyChainStore defaultService], @"specitfy default service name");
+}
+
+#pragma mark -
+
+- (void)testDefaultInitializer
+{
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStore];
+    XCTAssertEqualObjects(keychain.service, @"");
+    XCTAssertNil(keychain.accessGroup);
+    
+    keychain = [[UICKeyChainStore alloc] init];
+    XCTAssertEqualObjects(keychain.service, @"");
+    XCTAssertNil(keychain.accessGroup);
+}
+
+- (void)testInitializerWithService
+{
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithService:@"com.example.github-token"];
+    XCTAssertEqualObjects(keychain.service, @"com.example.github-token");
+    XCTAssertNil(keychain.accessGroup);
+    
+    keychain = [[UICKeyChainStore alloc] initWithService:@"com.example.github-token"];
+    XCTAssertEqualObjects(keychain.service, @"com.example.github-token");
+    XCTAssertNil(keychain.accessGroup);
+}
+
+- (void)testInitializerWithAccessGroup
+{
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithService:nil accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertEqualObjects(keychain.service, @"");
+    XCTAssertEqualObjects(keychain.accessGroup, @"27AEDK3C9F.shared");
+    
+    keychain = [[UICKeyChainStore alloc] initWithService:nil accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertEqualObjects(keychain.service, @"");
+    XCTAssertEqualObjects(keychain.accessGroup, @"27AEDK3C9F.shared");
+}
+
+- (void)testInitializerWithServiceAndAccessGroup
+{
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithService:@"com.example.github-token" accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertEqualObjects(keychain.service, @"com.example.github-token");
+    XCTAssertEqualObjects(keychain.accessGroup, @"27AEDK3C9F.shared");
+    
+    keychain = [[UICKeyChainStore alloc] initWithService:@"com.example.github-token" accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertEqualObjects(keychain.service, @"com.example.github-token");
+    XCTAssertEqualObjects(keychain.accessGroup, @"27AEDK3C9F.shared");
+}
+
+- (void)testInitializerWithServer
+{
+    NSURL *URL = [NSURL URLWithString:@"https://kishikawakatsumi.com"];
+    
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+    XCTAssertEqualObjects(keychain.server, URL);
+    XCTAssertEqual(keychain.protocolType, UICKeyChainStoreProtocolTypeHTTPS);
+    XCTAssertEqual(keychain.authenticationType, UICKeyChainStoreAuthenticationTypeDefault);
+    
+    keychain = [[UICKeyChainStore alloc] initWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+    XCTAssertEqualObjects(keychain.server, URL);
+    XCTAssertEqual(keychain.protocolType, UICKeyChainStoreProtocolTypeHTTPS);
+    XCTAssertEqual(keychain.authenticationType, UICKeyChainStoreAuthenticationTypeDefault);
+}
+
+- (void)testInitializerWithServerAndAuthenticationType
+{
+    NSURL *URL = [NSURL URLWithString:@"https://kishikawakatsumi.com"];
+    
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPS authenticationType:UICKeyChainStoreAuthenticationTypeHTMLForm];
+    XCTAssertEqualObjects(keychain.server, URL);
+    XCTAssertEqual(keychain.protocolType, UICKeyChainStoreProtocolTypeHTTPS);
+    XCTAssertEqual(keychain.authenticationType, UICKeyChainStoreAuthenticationTypeHTMLForm);
+    
+    keychain = [[UICKeyChainStore alloc] initWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPS authenticationType:UICKeyChainStoreAuthenticationTypeHTMLForm];
+    XCTAssertEqualObjects(keychain.server, URL);
+    XCTAssertEqual(keychain.protocolType, UICKeyChainStoreProtocolTypeHTTPS);
+    XCTAssertEqual(keychain.authenticationType, UICKeyChainStoreAuthenticationTypeHTMLForm);
+}
+
+#pragma mark -
+
+- (void)testContains
+{
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertFalse([keychain contains:@"username"], @"not stored username");
+    XCTAssertFalse([keychain contains:@"password"], @"not stored password");
+    
+    [keychain setString:@"kishikawa_katsumi" forKey:@"username"];
+    XCTAssertTrue([keychain contains:@"username"], @"stored username");
+    XCTAssertFalse([keychain contains:@"password"], @"not stored password");
+    
+    [keychain setString:@"password1234" forKey:@"password"];
+    XCTAssertTrue([keychain contains:@"username"], @"stored username");
+    XCTAssertTrue([keychain contains:@"password"], @"stored password");
+}
+
+#pragma mark -
+
+- (void)testSetString
+{
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertNil([keychain stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"not stored password");
+    
+    [keychain setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([keychain stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"not stored password");
+    
+    [keychain setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([keychain stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([keychain stringForKey:@"password"], @"password1234", @"stored password");
+}
+
+- (void)testSetData
+{
+    NSDictionary *JSONObject = @{@"username": @"kishikawakatsumi", @"password": @"password1234"};
+    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSONObject options:kNilOptions error:nil];
+    
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertNil([keychain dataForKey:@"JSONData"], @"not stored JSON data");
+    
+    [keychain setData:JSONData forKey:@"JSONData"];
+    XCTAssertEqualObjects([keychain dataForKey:@"JSONData"], JSONData, @"stored JSON data");
+}
+
+- (void)testRemoveString
+{
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertNil([keychain stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"not stored password");
+    
+    [keychain setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([keychain stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    
+    [keychain setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([keychain stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [keychain removeItemForKey:@"username"];
+    XCTAssertNil([keychain stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([keychain stringForKey:@"password"], @"password1234", @"left password");
+    
+    [keychain removeItemForKey:@"password"];
+    XCTAssertNil([keychain stringForKey:@"username"], @"removed username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"removed password");
+}
+
+- (void)testRemoveData
+{
+    NSDictionary *JSONObject = @{@"username": @"kishikawakatsumi", @"password": @"password1234"};
+    NSData *JSONData = [NSJSONSerialization dataWithJSONObject:JSONObject options:kNilOptions error:nil];
+    
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertNil([keychain dataForKey:@"JSONData"], @"not stored JSON data");
+    
+    [keychain setData:JSONData forKey:@"JSONData"];
+    XCTAssertEqualObjects([keychain dataForKey:@"JSONData"], JSONData, @"stored JSON Data");
+    
+    [keychain removeItemForKey:@"JSONData"];
+    XCTAssertNil([keychain dataForKey:@"JSONData"], @"removed JSON data");
+}
+
+#pragma mark -
+
+#if TARGET_OS_IPHONE
+- (void)testRemoveAllItemsWithErrorClassMethod
+{
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"not stored password");
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    
+    [UICKeyChainStore setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"stored password");
+    
+    NSError *error = nil;
+    [UICKeyChainStore removeAllItemsWithError:&error];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"removed password");
+    XCTAssertNil(error);
+}
+#else
+- (void)testRemoveAllItemsWithErrorClassMethod
+{
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"not stored password");
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    
+    [UICKeyChainStore setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeAllItemsWithError:nil];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"removed password");
+}
+#endif
+
+
+- (void)testRemoveAllItemsForServiceClassMethod
+{
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter"], @"not stored username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"not stored password");
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" service:@"Twitter"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username" service:@"Twitter"], @"kishikawakatsumi", @"stored username");
+    
+    [UICKeyChainStore setString:@"password1234" forKey:@"password" service:@"Twitter"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeAllItemsForService:@"Twitter" error:nil];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"removed password");
+}
+
+#pragma mark -
+
+- (void)testSubscripting
+{
+    UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    XCTAssertNil([keychain stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"not stored password");
+    
+    keychain[@"username"] = @"kishikawakatsumi";
+    XCTAssertEqualObjects([keychain stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    
+    keychain[@"password"] = @"password1234";
+    XCTAssertEqualObjects([keychain stringForKey:@"password"], @"password1234", @"stored password");
+    
+    keychain[@"username"] = nil;
+    XCTAssertNil([keychain stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([keychain stringForKey:@"password"], @"password1234", @"left password");
+    
+    keychain[@"password"] = nil;
+    XCTAssertNil([keychain stringForKey:@"username"], @"removed username");
+    XCTAssertNil([keychain stringForKey:@"password"], @"removed password");
+}
+
+#pragma mark -
+
+#if TARGET_OS_IPHONE
+- (void)testErrorHandling
+{
+    {
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain removeAllItemsWithError:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+    }
+    {
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain removeAllItemsWithError:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+    }
+    {
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain removeAllItemsWithError:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+    }
+    {
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStore];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain removeAllItemsWithError:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+    }
+    
+    {
+        // Add Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain setString:@"kishikawa_katsumi" forKey:@"username" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        succeeded = [keychain setString:@"password_1234" forKey:@"password" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        NSString *username = [keychain stringForKey:@"username" error:&error];
+        XCTAssertEqualObjects(username, @"kishikawa_katsumi");
+        XCTAssertNil(error, "no error occurred");
+        
+        NSString *password = [keychain stringForKey:@"password" error:&error];
+        XCTAssertEqualObjects(password, @"password_1234");
+        XCTAssertNil(error, "no error occurred");
+    }
+    
+    {
+        // Update Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain setString:@"katsumi_kishikawa" forKey:@"username" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        succeeded = [keychain setString:@"1234_password" forKey:@"password" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        NSString *username = [keychain stringForKey:@"username" error:&error];
+        XCTAssertEqualObjects(username, @"katsumi_kishikawa");
+        XCTAssertNil(error, "no error occurred");
+        
+        NSString *password = [keychain stringForKey:@"password" error:&error];
+        XCTAssertEqualObjects(password, @"1234_password");
+        XCTAssertNil(error, "no error occurred");
+    }
+    
+    {
+        // Remove Keychain items
+        UICKeyChainStore *keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+        
+        NSError *error = nil;
+        BOOL succeeded = [keychain removeItemForKey:@"username" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        succeeded = [keychain removeItemForKey:@"password" error:&error];
+        XCTAssertNil(error, "no error occurred");
+        XCTAssertTrue(succeeded, "succeeded");
+        
+        XCTAssertNil([keychain stringForKey:@"username"]);
+        XCTAssertNil([keychain stringForKey:@"password"]);
+    }
+}
+#endif
+
+#pragma mark -
+
+- (void)testSetStringWithCustomService
+{
+    NSString *username_1 = @"kishikawakatsumi";
+    NSString *password_1 = @"password1234";
+    NSString *username_2 = @"kishikawa_katsumi";
+    NSString *password_2 = @"password_1234";
+    NSString *username_3 = @"k_katsumi";
+    NSString *password_3 = @"12341234";
+    
+    NSString *service_1 = @"";
+    NSString *service_2 = @"com.kishikawakatsumi.KeychainAccess";
+    NSString *service_3 = @"example.com";
+    
+    [[UICKeyChainStore keyChainStore] removeAllItems];
+    [[UICKeyChainStore keyChainStoreWithService:service_1] removeAllItems];
+    [[UICKeyChainStore keyChainStoreWithService:service_2] removeAllItems];
+    [[UICKeyChainStore keyChainStoreWithService:service_3] removeAllItems];
+    
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"password"], @"not stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], @"not stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], @"not stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], @"not stored password");
+    
+    [[UICKeyChainStore keyChainStore] setString:username_1 forKey:@"username"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], @"not stored username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_1] setString:username_1 forKey:@"username"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], @"not stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], @"not stored username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_2] setString:username_2 forKey:@"username"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], username_2, @"stored username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], @"not stored username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_3] setString:username_3 forKey:@"username"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], username_1, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], username_2, @"stored username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], username_3, @"stored username");
+    
+    [[UICKeyChainStore keyChainStore] setString:password_1 forKey:@"password"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], @"not stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], @"not stored password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_1] setString:password_1 forKey:@"password"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], @"not stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], @"not stored password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_2] setString:password_2 forKey:@"password"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], password_2, @"stored password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], @"not stored password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_3] setString:password_3 forKey:@"password"];
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStore] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], password_1, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], password_2, @"stored password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], password_3, @"stored password");
+    
+    [[UICKeyChainStore keyChainStore] removeItemForKey:@"username"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], username_2, @"left username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], username_3, @"left username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_1] removeItemForKey:@"username"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], username_2, @"left username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], username_3, @"left username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_2] removeItemForKey:@"username"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], username_3, @"left username");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_3] removeItemForKey:@"username"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"username"], @"removed username");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"username"], @"removed username");
+    
+    [[UICKeyChainStore keyChainStore] removeItemForKey:@"password"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], @"removed password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], password_2, @"left password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], password_3, @"left password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_1] removeItemForKey:@"password"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], @"removed password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], password_2, @"left password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], password_3, @"left password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_2] removeItemForKey:@"password"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], @"removed password");
+    XCTAssertEqualObjects([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], password_3, @"left password");
+    
+    [[UICKeyChainStore keyChainStoreWithService:service_3] removeItemForKey:@"password"];
+    XCTAssertNil([[UICKeyChainStore keyChainStore] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_1] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_2] stringForKey:@"password"], @"removed password");
+    XCTAssertNil([[UICKeyChainStore keyChainStoreWithService:service_3] stringForKey:@"password"], @"removed password");
+}
+
+#pragma mark -
+
+- (void)testSetStringClassMethod
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStore];
+    [store removeAllItems];
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
+    [UICKeyChainStore setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"stored password");
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"left password");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"removed password");
+    XCTAssertNil([store stringForKey:@"username"], @"removed username");
+    XCTAssertNil([store stringForKey:@"password"], @"removed password");
+}
+
+- (void)testSetStringWithServiceClassMethod1
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    [store removeAllItems];
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" service:@"Twitter"];
+    [UICKeyChainStore setString:@"password1234" forKey:@"password" service:@"Twitter"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username" service:@"Twitter"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"password1234", @"stored password");
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"password1234", @"left password");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"removed password");
+    XCTAssertNil([store stringForKey:@"username"], @"removed username");
+    XCTAssertNil([store stringForKey:@"password"], @"removed password");
+}
+
+#if TARGET_OS_IPHONE
+- (void)testSetStringWithServiceClassMethod2
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    [store removeAllItems];
+    
+    NSError *error = nil;
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" service:@"Twitter" error:&error];
+    XCTAssertNil(error);
+    [UICKeyChainStore setString:@"password1234" forKey:@"password" service:@"Twitter" error:&error];
+    XCTAssertNil(error);
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username" service:@"Twitter" error:&error], @"kishikawakatsumi", @"stored username");
+    XCTAssertNil(error);
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter" error:&error], @"password1234", @"stored password");
+    XCTAssertNil(error);
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter" error:&error];
+    XCTAssertNil(error);
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter" error:&error], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter" error:&error], @"password1234", @"left password");
+    XCTAssertNil(error);
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter" error:&error];
+    XCTAssertNil(error);
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter" error:&error], @"removed username");
+    XCTAssertNil(error);
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password" service:@"Twitter" error:&error], @"removed password");
+    XCTAssertNil(error);
+    XCTAssertNil([store stringForKey:@"username"], @"removed username");
+    XCTAssertNil([store stringForKey:@"password"], @"removed password");
+}
+#endif
+
+- (void)testSetStringWithServiceAndAccessGroupClassMethod
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+    [store removeAllItems];
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+    [UICKeyChainStore setString:@"password1234" forKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"], @"password1234", @"stored password");
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" service:@"Twitter"], @"password1234", @"left password");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared"], @"removed password");
+    XCTAssertNil([store stringForKey:@"username"], @"removed username");
+    XCTAssertNil([store stringForKey:@"password"], @"removed password");
+}
+
+#if TARGET_OS_IPHONE
+- (void)testSetStringClassMethodAndError
+{
+    NSError *error = nil;
+    
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStore];
+    [store removeAllItemsWithError:&error];
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    [UICKeyChainStore setString:@"password1234" forKey:@"password" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username" error:&error], @"kishikawakatsumi", @"stored username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" error:&error], @"password1234", @"stored password");
+    XCTAssertNil(error, @"no error");
+    
+    XCTAssertEqualObjects([store stringForKey:@"username" error:&error], @"kishikawakatsumi", @"stored username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([store stringForKey:@"password" error:&error], @"password1234", @"stored password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password" error:&error], @"password1234", @"left password");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([store stringForKey:@"password" error:&error], @"password1234", @"left password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"password" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password" error:&error], @"removed password");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([store stringForKey:@"username" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([store stringForKey:@"password" error:&error], @"removed password");
+    XCTAssertNil(error, @"no error");
+}
+#endif
+
+- (void)testSetNilStringClassMethod
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStore];
+    [store removeAllItems];
+    
+    [UICKeyChainStore setString:nil forKey:@"username"];
+    [UICKeyChainStore setString:nil forKey:@"password"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"no username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"no password");
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
+    [UICKeyChainStore setString:@"password1234" forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"stored password");
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi", @"stored username");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"stored password");
+    
+    [UICKeyChainStore setString:nil forKey:@"username"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"password"], @"password1234", @"left password");
+    XCTAssertEqualObjects([store stringForKey:@"password"], @"password1234", @"left password");
+    
+    [UICKeyChainStore setString:nil forKey:@"password"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore stringForKey:@"password"], @"removed password");
+    XCTAssertNil([store stringForKey:@"username"], @"removed username");
+    XCTAssertNil([store stringForKey:@"password"], @"removed password");
+}
+
+#pragma mark -
+
+- (void)testSetDataClassMethod
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+
+    [UICKeyChainStore setData:usernameData forKey:@"username"];
+    [UICKeyChainStore setData:passwordData forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username"], usernameData, @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password"], passwordData, @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password"], passwordData, @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"removed password");
+}
+
+- (void)testSetDataWithServiceClassMethod
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+    
+    [UICKeyChainStore setData:usernameData forKey:@"username" service:@"Twitter"];
+    [UICKeyChainStore setData:passwordData forKey:@"password" service:@"Twitter"];
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username" service:@"Twitter"], usernameData, @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter"], passwordData, @"stored password");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter"], passwordData, @"left password");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter"], @"removed username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password" service:@"Twitter"], @"removed password");
+}
+
+#if TARGET_OS_IPHONE
+- (void)testSetDataClassMethodAndError
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+    
+    NSError *error = nil;
+    
+    [UICKeyChainStore setData:usernameData forKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username" error:&error], usernameData, @"stored username");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore setData:passwordData forKey:@"password" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" error:&error], passwordData, @"stored password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:[UICKeyChainStore defaultService] error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" error:&error], passwordData, @"left password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:[UICKeyChainStore defaultService] error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password" error:&error], @"removed password");
+    XCTAssertNil(error, @"no error");
+}
+
+- (void)testSetDataWithServiceClassMethodAndError
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+    
+    NSError *error = nil;
+    [UICKeyChainStore setData:usernameData forKey:@"username" service:@"Twitter" error:&error];
+    XCTAssertNil(error, @"no error");
+    [UICKeyChainStore setData:passwordData forKey:@"password" service:@"Twitter" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username" service:@"Twitter" error:&error], usernameData, @"stored username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter" error:&error], passwordData, @"stored password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter" error:&error], passwordData, @"left password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password" service:@"Twitter" error:&error], @"removed password");
+    XCTAssertNil(error, @"no error");
+}
+
+- (void)testSetDataWithServiceAndAccessGroupClassMethodAndError
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+    
+    NSError *error = nil;
+    [UICKeyChainStore setData:usernameData forKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error];
+    XCTAssertNil(error, @"no error");
+    [UICKeyChainStore setData:passwordData forKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], usernameData, @"stored username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], passwordData, @"stored password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], passwordData, @"left password");
+    XCTAssertNil(error, @"no error");
+    
+    [UICKeyChainStore removeItemForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], @"removed username");
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password" service:@"Twitter" accessGroup:@"27AEDK3C9F.shared" error:&error], @"removed password");
+    XCTAssertNil(error, @"no error");
+}
+
+#endif
+
+- (void)testSetNilData
+{
+    NSData *usernameData = [@"kishikawakatsumi" dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *passwordData = [@"password1234" dataUsingEncoding:NSUTF8StringEncoding];
+    
+    [UICKeyChainStore setData:nil forKey:@"username"];
+    [UICKeyChainStore setData:nil forKey:@"password"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"no username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"no password");
+    
+    [UICKeyChainStore setData:usernameData forKey:@"username"];
+    [UICKeyChainStore setData:passwordData forKey:@"password"];
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"username"], usernameData, @"stored username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password"], passwordData, @"stored password");
+    
+    [UICKeyChainStore setData:nil forKey:@"username"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertEqualObjects([UICKeyChainStore dataForKey:@"password"], passwordData, @"left password");
+    
+    [UICKeyChainStore setData:nil forKey:@"password"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"removed password");
+    
+    [UICKeyChainStore removeItemForKey:@"username"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"removed password");
+    
+    [UICKeyChainStore removeItemForKey:@"password"];
+    XCTAssertNil([UICKeyChainStore dataForKey:@"username"], @"removed username");
+    XCTAssertNil([UICKeyChainStore dataForKey:@"password"], @"removed password");
+}
+
+#pragma mark -
+
+- (void)testClassMethodsSetAndRemoveItem
+{
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([UICKeyChainStore stringForKey:@"username"], @"kishikawakatsumi");
+    
+    [UICKeyChainStore removeItemForKey:@"username"];
+    XCTAssertNil([UICKeyChainStore stringForKey:@"username"]);
+}
+
+#if TARGET_OS_IPHONE
+- (void)testClassMethodsSetAndRemoveItemWithNoError
+{
+    NSError *error = nil;
+    
+    [UICKeyChainStore setString:@"kishikawakatsumi" forKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    NSString *username = [UICKeyChainStore stringForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects(username, @"kishikawakatsumi");
+    
+    [UICKeyChainStore removeItemForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    username = [UICKeyChainStore stringForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    XCTAssertNil(username);
+}
+#endif
+
+- (void)testInstanceMethodsSetAndRemoveItem
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    [store setString:@"kishikawakatsumi" forKey:@"username"];
+    XCTAssertEqualObjects([store stringForKey:@"username"], @"kishikawakatsumi");
+    
+    [store removeItemForKey:@"username"];
+    XCTAssertNil([store stringForKey:@"username"]);
+}
+
+#if TARGET_OS_IPHONE
+- (void)testInstanceMethodsSetAndRemoveItemWithNoError
+{
+    NSError *error = nil;
+    
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    [store setString:@"kishikawakatsumi" forKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    NSString *username = [store stringForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertEqualObjects(username, @"kishikawakatsumi");
+    
+    [store removeItemForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    
+    username = [store stringForKey:@"username" error:&error];
+    XCTAssertNil(error, @"no error");
+    XCTAssertNil(username);
+}
+#endif
+
+- (void)testInstanceMethodsSetAndRemoveWithNilValue
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    [store setString:@"kishikawakatsumi" forKey:@"username"];
+    
+    NSString *username = [store stringForKey:@"username"];
+    XCTAssertEqualObjects(username, @"kishikawakatsumi");
+    
+    [store setString:nil forKey:@"username"];
+    
+    username = [store stringForKey:@"username"];
+    XCTAssertNil(username);
+}
+
+#pragma mark -
+
+- (void)testGetAllKeys1
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"github.com"];
+    [store removeAllItems];
+    
+    [store setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi"];
+    [store setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada"];
+    [store setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon"];
+    
+    NSArray *allKeys = store.allKeys;
+    XCTAssertTrue([allKeys containsObject:@"kishikawakatsumi"]);
+    XCTAssertTrue([allKeys containsObject:@"hirohamada"]);
+    XCTAssertTrue([allKeys containsObject:@"honeylemon"]);
+    
+    XCTAssertEqual(allKeys.count, 3);
+    
+    [store removeAllItems];
+}
+
+- (void)testGetAllKeys2
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+    [store removeAllItems];
+    
+    [store setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi"];
+    [store setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada"];
+    [store setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon"];
+    
+    NSArray *allKeys = store.allKeys;
+    XCTAssertTrue([allKeys containsObject:@"kishikawakatsumi"]);
+    XCTAssertTrue([allKeys containsObject:@"hirohamada"]);
+    XCTAssertTrue([allKeys containsObject:@"honeylemon"]);
+    
+    XCTAssertEqual(allKeys.count, 3);
+    
+    [store removeAllItems];
+}
+
+- (void)testGetAllItems1
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"github.com"];
+    [store removeAllItems];
+    
+    [store setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi"];
+    [store setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada"];
+    [store setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon"];
+    
+    NSArray *allItems = store.allItems;
+    for (NSDictionary *item in allItems) {
+        if ([item[@"key"] isEqualToString:@"kishikawakatsumi"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"01234567-89ab-cdef-0123-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"hirohamada"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"00000000-89ab-cdef-0000-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"honeylemon"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"11111111-89ab-cdef-1111-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+    }
+    
+    XCTAssertEqual(allItems.count, 3);
+    
+    [store removeAllItems];
+}
+
+- (void)testGetAllItems2
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithServer:(NSURL *)[NSURL URLWithString:@"https://kishikawakatsumi.com"] protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+    [store removeAllItems];
+    
+    [store setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi"];
+    [store setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada"];
+    [store setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon"];
+    
+    NSArray *allItems = store.allItems;
+    for (NSDictionary *item in allItems) {
+        if ([item[@"key"] isEqualToString:@"kishikawakatsumi"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"01234567-89ab-cdef-0123-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"server"], @"kishikawakatsumi.com");
+            XCTAssertEqualObjects(item[@"protocol"], (__bridge id)kSecAttrProtocolHTTPS);
+            XCTAssertEqualObjects(item[@"authenticationType"], (__bridge id)kSecAttrAuthenticationTypeDefault);
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"hirohamada"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"00000000-89ab-cdef-0000-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"server"], @"kishikawakatsumi.com");
+            XCTAssertEqualObjects(item[@"protocol"], (__bridge id)kSecAttrProtocolHTTPS);
+            XCTAssertEqualObjects(item[@"authenticationType"], (__bridge id)kSecAttrAuthenticationTypeDefault);
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"honeylemon"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"11111111-89ab-cdef-1111-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"server"], @"kishikawakatsumi.com");
+            XCTAssertEqualObjects(item[@"protocol"], (__bridge id)kSecAttrProtocolHTTPS);
+            XCTAssertEqualObjects(item[@"authenticationType"], (__bridge id)kSecAttrAuthenticationTypeDefault);
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+    }
+    
+    XCTAssertEqual(allItems.count, 3);
+    
+    [store removeAllItems];
+}
+
+- (void)testGetAllKeysGenericPasswordClassMethod
+{
+    [UICKeyChainStore removeAllItemsForService:@"github.com"];
+    
+    [UICKeyChainStore setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi" service:@"github.com"];
+    [UICKeyChainStore setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada" service:@"github.com"];
+    [UICKeyChainStore setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon" service:@"github.com"];
+    
+    NSArray *allKeysAndServices = [UICKeyChainStore allKeysWithItemClass:UICKeyChainStoreItemClassGenericPassword];
+    NSMutableArray *keys = [[NSMutableArray alloc] init];
+    for (NSDictionary *keyAndService in allKeysAndServices) {
+        if ([keyAndService[@"service"] isEqualToString:@"github.com"]) {
+            [keys addObject:(NSString *)keyAndService[@"key"]];
+        }
+    }
+    
+    XCTAssertTrue([keys containsObject:@"kishikawakatsumi"]);
+    XCTAssertTrue([keys containsObject:@"hirohamada"]);
+    XCTAssertTrue([keys containsObject:@"honeylemon"]);
+    
+    [UICKeyChainStore removeAllItemsForService:@"github.com"];
+}
+
+- (void)testGetAllItemsClassMethod
+{
+    [UICKeyChainStore removeAllItemsForService:@"github.com"];
+    
+    [UICKeyChainStore setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi" service:@"github.com"];
+    [UICKeyChainStore setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada" service:@"github.com"];
+    [UICKeyChainStore setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon" service:@"github.com"];
+    
+    NSArray *allItems = [UICKeyChainStore allItemsWithItemClass:UICKeyChainStoreItemClassGenericPassword];
+    for (NSDictionary *item in allItems) {
+        if ([item[@"key"] isEqualToString:@"kishikawakatsumi"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"01234567-89ab-cdef-0123-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"hirohamada"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"00000000-89ab-cdef-0000-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+        if ([item[@"key"] isEqualToString:@"honeylemon"]) {
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"value"], @"11111111-89ab-cdef-1111-456789abcdef");
+#else
+            XCTAssertEqualObjects(item[@"value"], @"");
+#endif
+            XCTAssertEqualObjects(item[@"service"], @"github.com");
+#if TARGET_OS_IPHONE
+            XCTAssertEqualObjects(item[@"accessibility"], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+#endif
+        }
+    }
+    
+    [UICKeyChainStore removeAllItemsForService:@"github.com"];
+}
+
+#pragma mark -
+
+- (void)testSetStringLabelAndComment
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    [store setString:@"kishikawakatsumi" forKey:@"username" label:@"Label" comment:@"Comment"];
+    
+    NSString *username = [store stringForKey:@"username"];
+    XCTAssertEqualObjects(username, @"kishikawakatsumi");
+    
+    [store setString:nil forKey:@"username"];
+    
+    username = [store stringForKey:@"username"];
+    XCTAssertNil(username);
+}
+
+- (void)testSetDataLabelAndComment
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:@[@"Keychain"]];
+    [store setData:data forKey:@"data" label:@"Label" comment:@"Comment"];
+    XCTAssertEqualObjects(data, [store dataForKey:@"data"]);
+}
+
+#pragma mark -
+
+- (void)testDescription
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"github.com"];
+    [store removeAllItems];
+    
+    [store setString:@"01234567-89ab-cdef-0123-456789abcdef" forKey:@"kishikawakatsumi"];
+    [store setString:@"00000000-89ab-cdef-0000-456789abcdef" forKey:@"hirohamada"];
+    [store setString:@"11111111-89ab-cdef-1111-456789abcdef" forKey:@"honeylemon"];
+    
+#if TARGET_OS_IPHONE
+    NSString *description = @"(\n" \
+    @"    {\n"
+    @"    accessGroup = \"27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost\";\n" \
+    @"    accessibility = ck;\n" \
+    @"    class = GenericPassword;\n" \
+    @"    key = kishikawakatsumi;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    synchronizable = 0;\n" \
+    @"    value = \"01234567-89ab-cdef-0123-456789abcdef\";\n" \
+    @"}    {\n" \
+    @"    accessGroup = \"27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost\";\n" \
+    @"    accessibility = ck;\n" \
+    @"    class = GenericPassword;\n" \
+    @"    key = hirohamada;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    synchronizable = 0;\n" \
+    @"    value = \"00000000-89ab-cdef-0000-456789abcdef\";\n" \
+    @"}    {\n" \
+    @"    accessGroup = \"27AEDK3C9F.com.kishikawakatsumi.KeychainAccess.TestHost\";\n" \
+    @"    accessibility = ck;\n" \
+    @"    class = GenericPassword;\n" \
+    @"    key = honeylemon;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    synchronizable = 0;\n" \
+    @"    value = \"11111111-89ab-cdef-1111-456789abcdef\";\n" \
+    @"})";
+#else
+    NSString *description = @"(\n" \
+    @"    {\n"
+    @"    class = GenericPassword;\n" \
+    @"    key = kishikawakatsumi;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    value = \"\";\n" \
+    @"}    {\n" \
+    @"    class = GenericPassword;\n" \
+    @"    key = hirohamada;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    value = \"\";\n" \
+    @"}    {\n" \
+    @"    class = GenericPassword;\n" \
+    @"    key = honeylemon;\n" \
+    @"    service = \"github.com\";\n" \
+    @"    value = \"\";\n" \
+    @"})";
+#endif
+    XCTAssertEqualObjects(store.description, description);
+    
+    [store removeAllItems];
+}
+
+#pragma mark -
+
+- (void)testStringConversionError
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:@[@"Keychain"]];
+    
+    [store setData:data forKey:@"data"];
+    
+    NSError *error = nil;
+    NSString *s = [store stringForKey:@"data" error:&error];
+    XCTAssertNil(s);
+    XCTAssertNotNil(error);
+}
+
+#if !__has_feature(nullability)
+- (void)testArgumentError
+{
+    UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    NSError *error = nil;
+    [store setString:@"kishikawakatsumi" forKey:nil error:&error];
+    XCTAssertNotNil(error);
+}
+#endif
+
+#pragma mark -
+
+- (void)testProtocolTypeAndAuthenticationTypePrivateMethod
+{
+    NSURL *URL = [NSURL URLWithString:@"https://kishikawakatsumi.com"];
+    
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeFTP authenticationType:UICKeyChainStoreAuthenticationTypeNTLM];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolFTP);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeNTLM);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeFTPAccount authenticationType:UICKeyChainStoreAuthenticationTypeMSN];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolFTPAccount);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeMSN);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTP authenticationType:UICKeyChainStoreAuthenticationTypeDPA];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolHTTP);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeDPA);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeIRC authenticationType:UICKeyChainStoreAuthenticationTypeRPA];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolIRC);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeRPA);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeNNTP authenticationType:UICKeyChainStoreAuthenticationTypeHTTPBasic];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolNNTP);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeHTTPBasic);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypePOP3 authenticationType:UICKeyChainStoreAuthenticationTypeHTTPDigest];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolPOP3);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeHTTPDigest);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeSMTP authenticationType:UICKeyChainStoreAuthenticationTypeHTMLForm];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolSMTP);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeHTMLForm);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeSOCKS authenticationType:UICKeyChainStoreAuthenticationTypeDefault];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolSOCKS);
+    XCTAssertEqualObjects([keychain authenticationTypeObject], (__bridge id)kSecAttrAuthenticationTypeDefault);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeIMAP];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolIMAP);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeLDAP];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolLDAP);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeAppleTalk];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolAppleTalk);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeAFP];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolAFP);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeTelnet];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolTelnet);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeSSH];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolSSH);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeFTPS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolFTPS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolHTTPS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPProxy];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolHTTPProxy);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeHTTPSProxy];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolHTTPSProxy);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeFTPProxy];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolFTPProxy);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeSMB];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolSMB);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeRTSP];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolRTSP);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeRTSPProxy];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolRTSPProxy);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeDAAP];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolDAAP);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeEPPC];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolEPPC);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeNNTPS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolNNTPS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeLDAPS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolLDAPS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeTelnetS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolTelnetS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypeIRCS];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolIRCS);
+    
+    keychain = [UICKeyChainStore keyChainStoreWithServer:URL protocolType:UICKeyChainStoreProtocolTypePOP3S];
+    XCTAssertEqualObjects([keychain protocolTypeObject], (__bridge id)kSecAttrProtocolPOP3S);
+}
+
+#pragma mark -
+
+- (void)testAccessibilityPrivateMethod
+{
+    UICKeyChainStore *keychain;
+    
+    keychain = [UICKeyChainStore keyChainStoreWithService:@"Twitter"];
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityWhenUnlocked;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleWhenUnlocked);
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityAfterFirstUnlock;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleAfterFirstUnlock);
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityAlways;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleAlways);
+    
+#if TARGET_OS_IPHONE
+    keychain.accessibility = UICKeyChainStoreAccessibilityWhenPasscodeSetThisDeviceOnly;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly);
+#endif
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityWhenUnlockedThisDeviceOnly;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly);
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityAfterFirstUnlockThisDeviceOnly;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly);
+    
+    keychain.accessibility = UICKeyChainStoreAccessibilityAlwaysThisDeviceOnly;
+    XCTAssertEqualObjects([keychain accessibilityObject], (__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly);
+}
+
+@end

+ 94 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/v1.1.1-Lib/UICv1KeyChainStore.h

@@ -0,0 +1,94 @@
+//
+//  a copy of UICKeyChainStore.h v1.1.1 for testing
+//
+//  Created by Kishikawa Katsumi on 11/11/20.
+//  Copyright (c) 2011 Kishikawa Katsumi. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+extern NSString * const UICv1KeyChainStoreErrorDomain;
+
+typedef NS_ENUM(NSInteger, UICv1KeyChainStoreErrorCode) {
+    UICv1KeyChainStoreErrorInvalidArguments = 1,
+};
+
+@interface UICv1KeyChainStore : NSObject
+
+@property (nonatomic, readonly) NSString *service;
+@property (nonatomic, readonly) NSString *accessGroup;
+
++ (NSString *)defaultService;
++ (void)setDefaultService:(NSString *)defaultService;
+
++ (UICv1KeyChainStore *)keyChainStore;
++ (UICv1KeyChainStore *)keyChainStoreWithService:(NSString *)service;
++ (UICv1KeyChainStore *)keyChainStoreWithService:(NSString *)service accessGroup:(NSString *)accessGroup;
+
+- (instancetype)init;
+- (instancetype)initWithService:(NSString *)service;
+- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup;
+
++ (NSString *)stringForKey:(NSString *)key;
++ (NSString *)stringForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service;
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key error:(NSError * __autoreleasing *)error;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
+
++ (NSData *)dataForKey:(NSString *)key;
++ (NSData *)dataForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service;
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError * __autoreleasing *)error;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
+
+- (void)setString:(NSString *)string forKey:(NSString *)key;
+- (BOOL)setString:(NSString *)string forKey:(NSString *)key error:(NSError * __autoreleasing *)error;
+- (NSString *)stringForKey:(NSString *)key;
+- (NSString *)stringForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
+
+- (void)setData:(NSData *)data forKey:(NSString *)key;
+- (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError * __autoreleasing *)error;
+- (NSData *)dataForKey:(NSString *)key;
+- (NSData *)dataForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
+
++ (BOOL)removeItemForKey:(NSString *)key;
++ (BOOL)removeItemForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service;
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
++ (BOOL)removeAllItems;
++ (BOOL)removeAllItemsWithError:(NSError * __autoreleasing *)error;
++ (BOOL)removeAllItemsForService:(NSString *)service;
++ (BOOL)removeAllItemsForService:(NSString *)service error:(NSError * __autoreleasing *)error;
++ (BOOL)removeAllItemsForService:(NSString *)service accessGroup:(NSString *)accessGroup;
++ (BOOL)removeAllItemsForService:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError * __autoreleasing *)error;
+
+- (void)removeItemForKey:(NSString *)key;
+- (BOOL)removeItemForKey:(NSString *)key error:(NSError * __autoreleasing *)error;
+- (void)removeAllItems;
+- (BOOL)removeAllItemsWithError:(NSError * __autoreleasing *)error;
+
+- (void)synchronize;
+- (BOOL)synchronizeWithError:(NSError *__autoreleasing *)error;
+
+// object subscripting
+
+- (NSString *)objectForKeyedSubscript:(NSString <NSCopying> *)key;
+- (void)setObject:(NSString *)obj forKeyedSubscript:(NSString <NSCopying> *)key;
+
+@end

+ 610 - 0
Carthage/Checkouts/UICKeyChainStore/Lib/UICKeyChainStoreTests/v1.1.1-Lib/UICv1KeyChainStore.m

@@ -0,0 +1,610 @@
+//
+//  a copy of UICKeyChainStore.m v1.1.1 for testing
+//
+//  Created by Kishikawa Katsumi on 11/11/20.
+//  Copyright (c) 2011 Kishikawa Katsumi. All rights reserved.
+//
+
+#import "UICv1KeyChainStore.h"
+
+NSString * const UICv1KeyChainStoreErrorDomain = @"com.kishikawakatsumi.uickeychainstore";
+static NSString *_defaultService;
+
+@interface UICv1KeyChainStore () {
+    NSMutableDictionary *itemsToUpdate;
+}
+
+@end
+
+@implementation UICv1KeyChainStore
+
++ (NSString *)defaultService
+{
+    if (!_defaultService) {
+        _defaultService = [[NSBundle mainBundle] bundleIdentifier];
+    }
+    
+    return _defaultService;
+}
+
++ (void)setDefaultService:(NSString *)defaultService
+{
+    _defaultService = defaultService;
+}
+
+#pragma mark -
+
++ (UICv1KeyChainStore *)keyChainStore
+{
+    return [[self alloc] initWithService:[self defaultService]];
+}
+
++ (UICv1KeyChainStore *)keyChainStoreWithService:(NSString *)service
+{
+    return [[self alloc] initWithService:service];
+}
+
++ (UICv1KeyChainStore *)keyChainStoreWithService:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [[self alloc] initWithService:service accessGroup:accessGroup];
+}
+
+- (instancetype)init
+{
+    return [self initWithService:[self.class defaultService] accessGroup:nil];
+}
+
+- (instancetype)initWithService:(NSString *)service
+{
+    return [self initWithService:service accessGroup:nil];
+}
+
+- (instancetype)initWithService:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    self = [super init];
+    if (self) {
+        if (!service) {
+            service = [self.class defaultService];
+        }
+        _service = [service copy];
+        _accessGroup = [accessGroup copy];
+        
+        itemsToUpdate = [[NSMutableDictionary alloc] init];
+    }
+    
+    return self;
+}
+
+#pragma mark -
+
++ (NSString *)stringForKey:(NSString *)key
+{
+    return [self stringForKey:key error:nil];
+}
+
++ (NSString *)stringForKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    return [self stringForKey:key service:nil error:error];
+}
+
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service
+{
+    return [self stringForKey:key service:service error:nil];
+}
+
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self stringForKey:key service:service accessGroup:nil error:error];
+}
+
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self stringForKey:key service:service accessGroup:accessGroup error:nil];
+}
+
++ (NSString *)stringForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    NSData *data = [self dataForKey:key service:service accessGroup:accessGroup error:error];
+    if (data) {
+        return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+    }
+    
+    return nil;
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key
+{
+    return [self setString:value forKey:key error:nil];
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    return [self setString:value forKey:key service:nil error:error];
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service
+{
+    return [self setString:value forKey:key service:service error:nil];
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self setString:value forKey:key service:service accessGroup:nil error:error];
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self setString:value forKey:key service:service accessGroup:accessGroup error:nil];
+}
+
++ (BOOL)setString:(NSString *)value forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    NSData *data = [value dataUsingEncoding:NSUTF8StringEncoding];
+    return [self setData:data forKey:key service:service accessGroup:accessGroup error:error];
+}
+
+#pragma mark -
+
++ (NSData *)dataForKey:(NSString *)key
+{
+    return [self dataForKey:key error:nil];
+}
+
++ (NSData *)dataForKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    return [self dataForKey:key service:nil error:error];
+}
+
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service
+{
+    return [self dataForKey:key service:service error:nil];
+}
+
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self dataForKey:key service:service accessGroup:nil error:error];
+}
+
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self dataForKey:key service:service accessGroup:accessGroup error:nil];
+}
+
++ (NSData *)dataForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    if (!key) {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:UICv1KeyChainStoreErrorInvalidArguments userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"`key` must not to be nil", nil)}];
+        }
+        return nil;
+    }
+    if (!service) {
+        service = [self defaultService];
+    }
+    
+    NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+    [query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+    [query setObject:(__bridge id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
+    [query setObject:(__bridge id)kSecMatchLimitOne forKey:(__bridge id)kSecMatchLimit];
+    [query setObject:service forKey:(__bridge id)kSecAttrService];
+    [query setObject:key forKey:(__bridge id)kSecAttrGeneric];
+    [query setObject:key forKey:(__bridge id)kSecAttrAccount];
+#if !TARGET_IPHONE_SIMULATOR && defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+    if (accessGroup) {
+        [query setObject:accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
+    }
+#endif
+    
+    CFTypeRef data = nil;
+    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, &data);
+    if (status != errSecSuccess) {
+        if (status != errSecItemNotFound) {
+            if (error) {
+                *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+            }
+        }
+        return nil;
+    }
+    
+    NSData *ret = [NSData dataWithData:(__bridge NSData *)data];
+    if (data) {
+        CFRelease(data);
+    }
+    
+    return ret;
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key
+{
+    return [self setData:data forKey:key error:nil];
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    return [self setData:data forKey:key service:nil error:error];
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service
+{
+    return [self setData:data forKey:key service:service error:nil];
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self setData:data forKey:key service:service accessGroup:nil error:error];
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self setData:data forKey:key service:service accessGroup:accessGroup error:nil];
+}
+
++ (BOOL)setData:(NSData *)data forKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    if (!key) {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:UICv1KeyChainStoreErrorInvalidArguments userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"`key` must not to be nil", nil)}];
+        }
+        return NO;
+    }
+    if (!service) {
+        service = [self defaultService];
+    }
+    
+    NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+    [query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+    [query setObject:service forKey:(__bridge id)kSecAttrService];
+    [query setObject:key forKey:(__bridge id)kSecAttrGeneric];
+    [query setObject:key forKey:(__bridge id)kSecAttrAccount];
+#if !TARGET_IPHONE_SIMULATOR && defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+    if (accessGroup) {
+        [query setObject:accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
+    }
+#endif
+    
+    OSStatus status = SecItemCopyMatching((__bridge CFDictionaryRef)query, NULL);
+    if (status == errSecSuccess) {
+        if (data) {
+            NSMutableDictionary *attributesToUpdate = [[NSMutableDictionary alloc] init];
+            [attributesToUpdate setObject:data forKey:(__bridge id)kSecValueData];
+            
+            status = SecItemUpdate((__bridge CFDictionaryRef)query, (__bridge CFDictionaryRef)attributesToUpdate);
+            if (status != errSecSuccess) {
+                if (error) {
+                    *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+                }
+                return NO;
+            }
+        } else {
+            [self removeItemForKey:key service:service accessGroup:accessGroup];
+        }
+    } else if (status == errSecItemNotFound) {
+        if (!data) {
+            return YES;
+        }
+        NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
+        [attributes setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+        [attributes setObject:service forKey:(__bridge id)kSecAttrService];
+        [attributes setObject:key forKey:(__bridge id)kSecAttrGeneric];
+        [attributes setObject:key forKey:(__bridge id)kSecAttrAccount];
+#if TARGET_OS_IPHONE || (defined(MAC_OS_X_VERSION_10_9) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9)
+        [attributes setObject:(__bridge id)kSecAttrAccessibleAfterFirstUnlock forKey:(__bridge id)kSecAttrAccessible];
+#endif
+        [attributes setObject:data forKey:(__bridge id)kSecValueData];
+#if !TARGET_IPHONE_SIMULATOR && defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+        if (accessGroup) {
+            [attributes setObject:accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
+        }
+#endif
+        
+        status = SecItemAdd((__bridge CFDictionaryRef)attributes, NULL);
+        if (status != errSecSuccess) {
+            if (error) {
+                *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+            }
+            return NO;
+        }
+    } else {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+        }
+        return NO;
+    }
+    
+    return YES;
+}
+
+#pragma mark -
+
+- (void)setString:(NSString *)string forKey:(NSString *)key
+{
+    [self setData:[string dataUsingEncoding:NSUTF8StringEncoding] forKey:key error:nil];
+}
+
+- (BOOL)setString:(NSString *)string forKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    [self setData:[string dataUsingEncoding:NSUTF8StringEncoding] forKey:key error:error];
+    return error == nil;
+}
+
+- (NSString *)stringForKey:(id)key
+{
+    return [self stringForKey:key error:nil];
+}
+
+- (NSString *)stringForKey:(id)key error:(NSError *__autoreleasing *)error
+{
+    NSData *data = [self dataForKey:key error:error];
+    if (data) {
+        return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+    }
+    
+    return nil;
+}
+
+#pragma mark -
+
+- (void)setData:(NSData *)data forKey:(NSString *)key
+{
+    [self setData:data forKey:key error:nil];
+}
+
+- (BOOL)setData:(NSData *)data forKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    if (!key) {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:UICv1KeyChainStoreErrorInvalidArguments userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"`key` must not to be nil", nil)}];
+        }
+        return error == nil;
+    }
+    if (!data) {
+        [self removeItemForKey:key error:error];
+    } else {
+        [itemsToUpdate setObject:data forKey:key];
+    }
+    return error == nil;
+}
+
+- (NSData *)dataForKey:(NSString *)key
+{
+    return [self dataForKey:key error:nil];
+}
+
+- (NSData *)dataForKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    NSData *data = [itemsToUpdate objectForKey:key];
+    if (!data) {
+        data = [self.class dataForKey:key service:self.service accessGroup:self.accessGroup error:error];
+    }
+    
+    return data;
+}
+
+#pragma mark -
+
++ (BOOL)removeItemForKey:(NSString *)key
+{
+    return [self removeItemForKey:key error:nil];
+}
+
++ (BOOL)removeItemForKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    return [self removeItemForKey:key service:nil error:error];
+}
+
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service
+{
+    return [self removeItemForKey:key service:service error:nil];
+}
+
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self removeItemForKey:key service:service accessGroup:nil error:error];
+}
+
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self removeItemForKey:key service:service accessGroup:accessGroup error:nil];
+}
+
++ (BOOL)removeItemForKey:(NSString *)key service:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    if (!key) {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:UICv1KeyChainStoreErrorInvalidArguments userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"`key` must not to be nil", nil)}];
+        }
+        return NO;
+    }
+    if (!service) {
+        service = [self defaultService];
+    }
+    
+    NSMutableDictionary *itemToDelete = [[NSMutableDictionary alloc] init];
+    [itemToDelete setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+    [itemToDelete setObject:service forKey:(__bridge id)kSecAttrService];
+    [itemToDelete setObject:key forKey:(__bridge id)kSecAttrGeneric];
+    [itemToDelete setObject:key forKey:(__bridge id)kSecAttrAccount];
+#if !TARGET_IPHONE_SIMULATOR && defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+    if (accessGroup) {
+        [itemToDelete setObject:accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
+    }
+#endif
+
+    CFDictionaryRef cfquery = (CFDictionaryRef)CFBridgingRetain(itemToDelete);
+    OSStatus status = SecItemDelete(cfquery);
+    CFRelease(cfquery);
+    if (status != errSecSuccess && status != errSecItemNotFound) {
+        if (error) {
+            *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+        }
+        return NO;
+    }
+    
+    return YES;
+}
+
++ (NSArray *)itemsForService:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    if (!service) {
+        service = [self defaultService];
+    }
+    
+    NSMutableDictionary *query = [[NSMutableDictionary alloc] init];
+    [query setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+    [query setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnAttributes];
+    [query setObject:(id)kCFBooleanTrue forKey:(__bridge id)kSecReturnData];
+    [query setObject:(__bridge id)kSecMatchLimitAll forKey:(__bridge id)kSecMatchLimit];
+    [query setObject:service forKey:(__bridge id)kSecAttrService];
+#if !TARGET_IPHONE_SIMULATOR && defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+    if (accessGroup) {
+        [query setObject:accessGroup forKey:(__bridge id)kSecAttrAccessGroup];
+    }
+#endif
+    
+    CFArrayRef result = nil;
+    CFDictionaryRef cfquery = (CFDictionaryRef)CFBridgingRetain(query);
+    OSStatus status = SecItemCopyMatching(cfquery, (CFTypeRef *)&result);
+    CFRelease(cfquery);
+    if (status == errSecSuccess || status == errSecItemNotFound) {
+        return CFBridgingRelease(result);
+    } else {
+        return nil;
+    }
+}
+
++ (BOOL)removeAllItems
+{
+    return [self removeAllItemsWithError:nil];
+}
+
++ (BOOL)removeAllItemsWithError:(NSError *__autoreleasing *)error
+{
+    return [self removeAllItemsForService:nil error:error];
+}
+
++ (BOOL)removeAllItemsForService:(NSString *)service
+{
+    return [self removeAllItemsForService:service error:nil];
+}
+
++ (BOOL)removeAllItemsForService:(NSString *)service error:(NSError *__autoreleasing *)error
+{
+    return [self removeAllItemsForService:service accessGroup:nil error:error];
+}
+
++ (BOOL)removeAllItemsForService:(NSString *)service accessGroup:(NSString *)accessGroup
+{
+    return [self removeAllItemsForService:service accessGroup:accessGroup error:nil];
+}
+
++ (BOOL)removeAllItemsForService:(NSString *)service accessGroup:(NSString *)accessGroup error:(NSError *__autoreleasing *)error
+{
+    NSArray *items = [UICv1KeyChainStore itemsForService:service accessGroup:accessGroup];
+    for (NSDictionary *item in items) {
+        NSMutableDictionary *itemToDelete = [[NSMutableDictionary alloc] initWithDictionary:item];
+        [itemToDelete setObject:(__bridge id)kSecClassGenericPassword forKey:(__bridge id)kSecClass];
+        
+        OSStatus status = SecItemDelete((__bridge CFDictionaryRef)itemToDelete);
+        if (status != errSecSuccess) {
+            if (error) {
+                *error = [NSError errorWithDomain:UICv1KeyChainStoreErrorDomain code:status userInfo:nil];
+            }
+            return NO;
+        }
+    }
+    
+    return YES;
+}
+
+#pragma mark -
+
+- (void)removeItemForKey:(NSString *)key
+{
+    if ([itemsToUpdate objectForKey:key]) {
+        [itemsToUpdate removeObjectForKey:key];
+    } else {
+        [self.class removeItemForKey:key service:self.service accessGroup:self.accessGroup error:nil];
+    }
+}
+
+- (BOOL)removeItemForKey:(NSString *)key error:(NSError *__autoreleasing *)error
+{
+    if ([itemsToUpdate objectForKey:key]) {
+        [itemsToUpdate removeObjectForKey:key];
+    } else {
+        [self.class removeItemForKey:key service:self.service accessGroup:self.accessGroup error:error];
+    }
+    return error == nil;
+}
+
+- (void)removeAllItems
+{
+    [self removeAllItemsWithError:nil];
+}
+
+- (BOOL)removeAllItemsWithError:(NSError *__autoreleasing *)error
+{
+    [itemsToUpdate removeAllObjects];
+    return [self.class removeAllItemsForService:self.service accessGroup:self.accessGroup error:error];
+}
+
+#pragma mark -
+
+- (void)synchronize
+{
+    for (NSString *key in itemsToUpdate) {
+        [self.class setData:[itemsToUpdate objectForKey:key] forKey:key service:self.service accessGroup:self.accessGroup error:nil];
+    }
+    
+    [itemsToUpdate removeAllObjects];
+}
+
+- (BOOL)synchronizeWithError:(NSError *__autoreleasing *)error
+{
+    for (NSString *key in itemsToUpdate) {
+        [self.class setData:[itemsToUpdate objectForKey:key] forKey:key service:self.service accessGroup:self.accessGroup error:error];
+    }
+    
+    [itemsToUpdate removeAllObjects];
+    return error == nil;
+}
+
+#pragma mark -
+
+- (NSString *)description
+{
+    NSArray *items = [UICv1KeyChainStore itemsForService:self.service accessGroup:self.accessGroup];
+    NSMutableArray *list = [[NSMutableArray alloc] initWithCapacity:items.count];
+    for (NSDictionary *attributes in items) {
+        NSMutableDictionary *attrs = [[NSMutableDictionary alloc] init];
+        [attrs setObject:(id)[attributes objectForKey:(__bridge id)kSecAttrService] forKey:@"Service"];
+        [attrs setObject:(id)[attributes objectForKey:(__bridge id)kSecAttrAccount] forKey:@"Account"];
+#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
+        [attrs setObject:(id)[attributes objectForKey:(__bridge id)kSecAttrAccessGroup] forKey:@"AccessGroup"];
+#endif
+        NSData *data = [attributes objectForKey:(__bridge id)kSecValueData];
+        NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
+        if (string) {
+            [attrs setObject:string forKey:@"Value"];
+        } else {
+            [attrs setObject:data forKey:@"Value"];
+        }
+        [list addObject:attrs];
+    }
+    
+    return [list description];
+}
+
+#pragma mark - Object Subscripting
+
+- (NSString *)objectForKeyedSubscript:(NSString <NSCopying> *)key
+{
+    return [self stringForKey:key];
+}
+
+- (void)setObject:(NSString *)obj forKeyedSubscript:(NSString <NSCopying> *)key
+{
+    [self setString:obj forKey:key];
+}
+
+@end

+ 32 - 0
Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.podspec

@@ -0,0 +1,32 @@
+Pod::Spec.new do |s|
+  s.name                  = "UICKeyChainStore"
+  s.version               = "2.1.1"
+  s.summary               = "UICKeyChainStore is a simple wrapper for Keychain that works on iOS and OS X. Makes using Keychain APIs as easy as NSUserDefaults."
+  s.description           = <<-DESC
+                            UICKeyChainStore is a simple wrapper for Keychain that works on iOS and OS X.
+                            Makes using Keychain APIs as easy as NSUserDefaults.
+
+                            Features
+                              - Simple interface
+                              - Support access group
+                              - [Support accessibility](#accessibility)
+                              - [Support iCloud sharing](#icloud_sharing)
+                              - **[Support TouchID and Keychain integration (iOS 8+)](#touch_id_integration)**
+                              - Works on both iOS & OS X
+                            DESC
+  s.homepage              = "https://github.com/kishikawakatsumi/UICKeyChainStore"
+  s.license               = { :type => "MIT", :file => "LICENSE" }
+  s.author                = { "kishikawa katsumi" => "kishikawakatsumi@mac.com" }
+  s.source                = { :git => "https://github.com/kishikawakatsumi/UICKeyChainStore.git", :tag => "v#{s.version}" }
+  s.social_media_url      = "https://twitter.com/k_katsumi"
+
+  s.ios.deployment_target = "4.3"
+  s.osx.deployment_target = "10.7"
+  s.watchos.deployment_target = '2.0'
+  s.tvos.deployment_target = '9.0'
+  s.requires_arc          = true
+
+  s.source_files          = "Lib/UICKeyChainStore/*.{h,m}"
+
+  s.framework             = "Security"
+end

+ 10 - 0
Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:Lib/UICKeyChainStore.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Examples/Example-iOS/Example-iOS.xcodeproj">
+   </FileRef>
+</Workspace>

+ 8 - 0
Carthage/Checkouts/UICKeyChainStore/UICKeyChainStore.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>IDEDidComputeMac32BitWarning</key>
+	<true/>
+</dict>
+</plist>

+ 20 - 20
Nextcloud.xcodeproj/project.pbxproj

@@ -112,7 +112,6 @@
 		F72D100F210B6B17009C96B7 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F72D100E210B6B17009C96B7 /* NotificationService.swift */; };
 		F72D1013210B6B17009C96B7 /* Notification Service Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F72D100C210B6B16009C96B7 /* Notification Service Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		F72D101A210B7473009C96B7 /* CCUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7053E3D1C639DF500741EA5 /* CCUtility.m */; };
-		F72D101B210B74CA009C96B7 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */; };
 		F72D101C210B75E4009C96B7 /* Realm.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DFE24F1EBDC3A400CF5202 /* Realm.framework */; };
 		F72D101D210B75E7009C96B7 /* RealmSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7DFE2501EBDC3A400CF5202 /* RealmSwift.framework */; };
 		F72D103A210B769E009C96B7 /* NCDatabase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7BAADB41ED5A87C00B7EAD4 /* NCDatabase.swift */; };
@@ -191,8 +190,6 @@
 		F73CC07E1E813DFF006E3047 /* BKTouchIDSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CC0681E813DFF006E3047 /* BKTouchIDSwitchView.m */; };
 		F73CC07F1E813DFF006E3047 /* BKTouchIDSwitchView.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CC0681E813DFF006E3047 /* BKTouchIDSwitchView.m */; };
 		F73CCE261DC13788007E38D8 /* UIScrollView+EmptyDataSet.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CCE241DC13788007E38D8 /* UIScrollView+EmptyDataSet.m */; };
-		F73CCE301DC13798007E38D8 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */; };
-		F73CCE321DC13798007E38D8 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */; };
 		F73D71621F2673C200E233EB /* NCText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73D71611F2673C200E233EB /* NCText.swift */; };
 		F73D71641F2674A400E233EB /* NCText.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F73D71631F2674A400E233EB /* NCText.storyboard */; };
 		F73F537F1E929C8500F8678D /* CCMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = F73F537E1E929C8500F8678D /* CCMore.swift */; };
@@ -230,7 +227,6 @@
 		F7434B5420E240A300417916 /* NSString+Encode.m in Sources */ = {isa = PBXBuildFile; fileRef = F700229D1EC4C9100080073F /* NSString+Encode.m */; };
 		F7434B5520E240A900417916 /* UtilsFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = F70022A01EC4C9100080073F /* UtilsFramework.m */; };
 		F7434B5620E2412900417916 /* CCError.m in Sources */ = {isa = PBXBuildFile; fileRef = F76C3B881C638A4C00DC4301 /* CCError.m */; };
-		F7434B5720E2416800417916 /* UICKeyChainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */; };
 		F7434B5820E241B100417916 /* CCNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F732BA041D76CE1500E9878B /* CCNetworking.m */; };
 		F7434B5920E241B600417916 /* OCNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = F74D3DBE1BAC1941000BAE4B /* OCNetworking.m */; };
 		F7434B5A20E241BB00417916 /* NCNetworkingEndToEnd.m in Sources */ = {isa = PBXBuildFile; fileRef = F74E432520B5547700C2E54C /* NCNetworkingEndToEnd.m */; };
@@ -485,6 +481,12 @@
 		F78F74362163781100C2ADAD /* NCTrash.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78F74352163781100C2ADAD /* NCTrash.swift */; };
 		F790110E21415BF600D7B136 /* NCViewerRichdocument.swift in Sources */ = {isa = PBXBuildFile; fileRef = F790110D21415BF600D7B136 /* NCViewerRichdocument.swift */; };
 		F79630EE215527D40015EEA5 /* NCViewerMedia.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79630ED215527D40015EEA5 /* NCViewerMedia.swift */; };
+		F79918A121997F9000C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
+		F79918A221997FA300C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
+		F79918A321997FA300C2E308 /* UICKeyChainStore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+		F79918A42199806500C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
+		F79918A52199816500C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
+		F79918A62199817600C2E308 /* UICKeyChainStore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79918A021997F9000C2E308 /* UICKeyChainStore.framework */; };
 		F79A65C32191D90F00FF6DCC /* NCSelect.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F79A65C22191D90F00FF6DCC /* NCSelect.storyboard */; };
 		F79A65C62191D95E00FF6DCC /* NCSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = F79A65C52191D95E00FF6DCC /* NCSelect.swift */; };
 		F7A321551E9E2A070069AD1B /* CCFavorites.m in Sources */ = {isa = PBXBuildFile; fileRef = F7A3214F1E9E2A070069AD1B /* CCFavorites.m */; };
@@ -670,6 +672,7 @@
 			dstPath = "";
 			dstSubfolderSpec = 10;
 			files = (
+				F79918A321997FA300C2E308 /* UICKeyChainStore.framework in Embed Frameworks */,
 				F7DFE25A1EBDC53200CF5202 /* RealmSwift.framework in Embed Frameworks */,
 				F7DFE2581EBDC52E00CF5202 /* Realm.framework in Embed Frameworks */,
 				F733B65421997D12001C1FFA /* TLPhotoPicker.framework in Embed Frameworks */,
@@ -915,8 +918,6 @@
 		F73CC0681E813DFF006E3047 /* BKTouchIDSwitchView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BKTouchIDSwitchView.m; sourceTree = "<group>"; };
 		F73CCE231DC13788007E38D8 /* UIScrollView+EmptyDataSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+EmptyDataSet.h"; sourceTree = "<group>"; };
 		F73CCE241DC13788007E38D8 /* UIScrollView+EmptyDataSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+EmptyDataSet.m"; sourceTree = "<group>"; };
-		F73CCE291DC13798007E38D8 /* UICKeyChainStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICKeyChainStore.h; sourceTree = "<group>"; };
-		F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICKeyChainStore.m; sourceTree = "<group>"; };
 		F73D71611F2673C200E233EB /* NCText.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NCText.swift; sourceTree = "<group>"; };
 		F73D71631F2674A400E233EB /* NCText.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = NCText.storyboard; sourceTree = "<group>"; };
 		F73F537E1E929C8500F8678D /* CCMore.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CCMore.swift; sourceTree = "<group>"; };
@@ -1301,6 +1302,7 @@
 		F7956FCA1B4886E60085DEA3 /* CCUploadFromOtherUpp.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CCUploadFromOtherUpp.m; sourceTree = "<group>"; };
 		F7956FCB1B4886E60085DEA3 /* CCUploadFromOtherUpp.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = CCUploadFromOtherUpp.storyboard; sourceTree = "<group>"; };
 		F79630ED215527D40015EEA5 /* NCViewerMedia.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCViewerMedia.swift; sourceTree = "<group>"; };
+		F79918A021997F9000C2E308 /* UICKeyChainStore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UICKeyChainStore.framework; path = Carthage/Build/iOS/UICKeyChainStore.framework; sourceTree = "<group>"; };
 		F79A65C22191D90F00FF6DCC /* NCSelect.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = NCSelect.storyboard; sourceTree = "<group>"; };
 		F79A65C52191D95E00FF6DCC /* NCSelect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCSelect.swift; sourceTree = "<group>"; };
 		F7A3214E1E9E2A070069AD1B /* CCFavorites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCFavorites.h; sourceTree = "<group>"; };
@@ -1558,6 +1560,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F79918A42199806500C2E308 /* UICKeyChainStore.framework in Frameworks */,
 				F7DFE2551EBDC3A400CF5202 /* RealmSwift.framework in Frameworks */,
 				F70A630F1D5B3467004E2AA5 /* libssl.a in Frameworks */,
 				F70A630B1D5B3467004E2AA5 /* libcrypto.a in Frameworks */,
@@ -1569,6 +1572,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F79918A62199817600C2E308 /* UICKeyChainStore.framework in Frameworks */,
 				F72D101D210B75E7009C96B7 /* RealmSwift.framework in Frameworks */,
 				F72D101C210B75E4009C96B7 /* Realm.framework in Frameworks */,
 				F72D1041210B77ED009C96B7 /* libssl.a in Frameworks */,
@@ -1580,6 +1584,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F79918A52199816500C2E308 /* UICKeyChainStore.framework in Frameworks */,
 				F771E3FD20E23BA700AFB62D /* Realm.framework in Frameworks */,
 				F771E3FF20E23C3A00AFB62D /* libssl.a in Frameworks */,
 				F771E40020E23C3D00AFB62D /* libcrypto.a in Frameworks */,
@@ -1591,6 +1596,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				F79918A221997FA300C2E308 /* UICKeyChainStore.framework in Frameworks */,
 				F7DFE2571EBDC52E00CF5202 /* Realm.framework in Frameworks */,
 				F75EDFBF1E8C116D00E6F369 /* libstdc++.tbd in Frameworks */,
 				F75EDFBD1E8C112F00E6F369 /* libsqlite3.0.tbd in Frameworks */,
@@ -1604,6 +1610,7 @@
 				F72D0FFE210B6638009C96B7 /* nanopb.framework in Frameworks */,
 				F72D0FFD210B6638009C96B7 /* GoogleToolboxForMac.framework in Frameworks */,
 				F72D0FF9210B6638009C96B7 /* Protobuf.framework in Frameworks */,
+				F79918A121997F9000C2E308 /* UICKeyChainStore.framework in Frameworks */,
 				F72D0FFB210B6638009C96B7 /* FirebaseCore.framework in Frameworks */,
 				F72D1000210B6638009C96B7 /* FirebaseInstanceID.framework in Frameworks */,
 				F7BB14961D5B62C000ECEE68 /* libcrypto.a in Frameworks */,
@@ -1784,7 +1791,6 @@
 				F7A55417204EF8AF008468EC /* TOScrollBar */,
 				F7622F6F2175FCC0000383FF /* Sheeeeeeeeet */,
 				F75AE3C51E9D12900088BB09 /* SwiftyAvatar */,
-				F73CCE271DC13798007E38D8 /* UICKeyChainStore */,
 				F70F05561C889184008DAB36 /* UIImage+animatedGIF */,
 			);
 			path = "Libraries external";
@@ -2045,15 +2051,6 @@
 			path = DZNEmptyDataSet;
 			sourceTree = "<group>";
 		};
-		F73CCE271DC13798007E38D8 /* UICKeyChainStore */ = {
-			isa = PBXGroup;
-			children = (
-				F73CCE291DC13798007E38D8 /* UICKeyChainStore.h */,
-				F73CCE2A1DC13798007E38D8 /* UICKeyChainStore.m */,
-			);
-			path = UICKeyChainStore;
-			sourceTree = "<group>";
-		};
 		F73D71561F26739100E233EB /* Text */ = {
 			isa = PBXGroup;
 			children = (
@@ -3382,6 +3379,7 @@
 		F7FC7D541DC1F93700BB2C6A /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
+				F79918A021997F9000C2E308 /* UICKeyChainStore.framework */,
 				F733B65121997CC1001C1FFA /* TLPhotoPicker.framework */,
 				F75EDFBE1E8C116D00E6F369 /* libstdc++.tbd */,
 				F75EDFBC1E8C112F00E6F369 /* libsqlite3.0.tbd */,
@@ -3874,7 +3872,6 @@
 				F70022CF1EC4C9100080073F /* OCShareUser.m in Sources */,
 				F71459E11D12E3B700CAFEEC /* CCHud.m in Sources */,
 				F70022B11EC4C9100080073F /* AFURLSessionManager.m in Sources */,
-				F73CCE321DC13798007E38D8 /* UICKeyChainStore.m in Sources */,
 				F70022AE1EC4C9100080073F /* AFURLResponseSerialization.m in Sources */,
 				F70022EA1EC4C9100080073F /* OCXMLShareByLinkParser.m in Sources */,
 				F77EB62A1EC0B50A003F814F /* CCCertificate.m in Sources */,
@@ -3912,7 +3909,6 @@
 				F72D100F210B6B17009C96B7 /* NotificationService.swift in Sources */,
 				F72D103A210B769E009C96B7 /* NCDatabase.swift in Sources */,
 				F72D103D210B7796009C96B7 /* OCSharedDto.m in Sources */,
-				F72D101B210B74CA009C96B7 /* UICKeyChainStore.m in Sources */,
 				F72D103F210B77B8009C96B7 /* NCPushNotificationEncryption.m in Sources */,
 				F72D103E210B77A5009C96B7 /* OCActivity.m in Sources */,
 				F72D1042210B783D009C96B7 /* NCEndToEndEncryption.m in Sources */,
@@ -3929,7 +3925,6 @@
 				F771E3F720E239B500AFB62D /* FileProviderExtension+Actions.swift in Sources */,
 				F7434B3720E23FF200417916 /* NCUtility.swift in Sources */,
 				F7434B5120E2409500417916 /* OCXMLServerErrorsParser.m in Sources */,
-				F7434B5720E2416800417916 /* UICKeyChainStore.m in Sources */,
 				F7434B3A20E2403500417916 /* OCActivity.m in Sources */,
 				F7434B6220E249F700417916 /* NSNotificationCenter+MainThread.m in Sources */,
 				F7434B4A20E2407600417916 /* AFURLSessionManager.m in Sources */,
@@ -4021,7 +4016,6 @@
 				F7622FBD2175FCC0000383FF /* ActionSheetSingleSelectItemAppearance.swift in Sources */,
 				F7D423881F0596C6009C9782 /* ReaderThumbView.m in Sources */,
 				F7622FC32175FCC0000383FF /* ActionSheetDefaultPresenter.swift in Sources */,
-				F73CCE301DC13798007E38D8 /* UICKeyChainStore.m in Sources */,
 				F758B44B212C516300515F55 /* CIRectangleFeature+Utils.swift in Sources */,
 				F73B4EFE1F470D9100BBEE4B /* LangHungarianModel.cpp in Sources */,
 				F7622FC12175FCC0000383FF /* ActionSheetCustomItemAppearance.swift in Sources */,
@@ -4412,6 +4406,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;
@@ -4454,6 +4449,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_NO_COMMON_BLOCKS = YES;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;
@@ -4501,6 +4497,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;
@@ -4552,6 +4549,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;
@@ -4600,6 +4598,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;
@@ -4648,6 +4647,7 @@
 				FRAMEWORK_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(PROJECT_DIR)\"/Libraries external/Realm\"",
+					"$(PROJECT_DIR)/Carthage/Build/iOS",
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu11;
 				GCC_PREFIX_HEADER = iOSClient/CryptoCloud.pch;