Permalink
Browse files

initial commit

  • Loading branch information...
mordaroso committed May 4, 2012
0 parents commit c836dbbf64169060535a8bdf31e387051d7da0d5
@@ -0,0 +1,4 @@
+.DS_Store
+.repl_history
+build-*
+build
@@ -0,0 +1,16 @@
+$:.unshift("/Library/RubyMotion/lib")
+require 'motion/project'
+
+Motion::Project::App.setup do |app|
+ # Use `rake config' to see complete project settings.
+ app.name = 'KeychainExample'
+
+ app.frameworks += ['Security']
+
+ app.vendor_project('vendor/GenericKeychain', :xcode,
+ :headers_dir => 'GenericKeychain')
+
+ app.entitlements['keychain-access-groups'] = [
+ app.seed_id + '.' + app.identifier
+ ]
+end
@@ -0,0 +1,13 @@
+class AppDelegate
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
+ @window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
+ @window.rootViewController = SettingsController.alloc.init
+ @window.rootViewController.wantsFullScreenLayout = true
+ @window.makeKeyAndVisible
+ return true
+ end
+
+ def user
+ @user ||= User.new
+ end
+end
@@ -0,0 +1,7 @@
+class SettingsController < UIViewController
+ def loadView
+ self.view = SettingsView.alloc.init
+ self.view.backgroundColor = UIColor.groupTableViewBackgroundColor
+ self.view.setNeedsDisplay
+ end
+end
@@ -0,0 +1,19 @@
+class User
+ attr_accessor :username, :password
+
+ def initialize
+ @keychain = KeychainItemWrapper.alloc.initWithIdentifier 'FloatingBillLoginData', accessGroup: nil
+ load
+ end
+
+ def save
+ @keychain.setObject username, forKey: KSecAttrAccount
+ @keychain.setObject password, forKey: KSecValueData
+ end
+
+ def load
+ self.username = @keychain.objectForKey KSecAttrAccount
+ NSLog("username: #{username}")
+ self.password = @keychain.objectForKey KSecValueData
+ end
+end
@@ -0,0 +1,57 @@
+class SettingsView < UIView
+ def drawRect(rect)
+ @user = UIApplication.sharedApplication.delegate.user
+ drawUsername
+ drawPassword
+ drawButton
+ end
+
+ def drawUsername
+ @username = UITextField.alloc.initWithFrame CGRectMake(40, 30, 240, 30)
+ @username.setBorderStyle UITextBorderStyleRoundedRect
+ @username.placeholder = 'Username'
+ @username.text = @user.username
+ @username.setReturnKeyType UIReturnKeyDone
+ @username.addTarget self, action: 'textFieldFinished', forControlEvents:UIControlEventEditingDidEndOnExit
+
+ addSubview @username
+ end
+
+ def drawPassword
+ @password = UITextField.alloc.initWithFrame CGRectMake(40, 75, 240, 30)
+ @password.setBorderStyle UITextBorderStyleRoundedRect
+ @password.placeholder = 'Password'
+ @password.text = @user.password
+ @password.setSecureTextEntry true
+ @password.setReturnKeyType UIReturnKeyDone
+ @password.addTarget self, action: 'textFieldFinished', forControlEvents:UIControlEventEditingDidEndOnExit
+
+ addSubview @password
+ end
+
+ def drawButton
+ @saveButton = UIButton.buttonWithType UIButtonTypeRoundedRect
+ @saveButton.setFrame CGRectMake(80, 130, 160, 40)
+ @saveButton.setTitle "Save", forState: UIControlStateNormal
+
+ pointer = Pointer.new(:object)
+
+ @saveButton.addTarget self, action:'saveSettings', forControlEvents: UIControlEventTouchUpInside
+
+
+ addSubview @saveButton
+ end
+
+ def textFieldFinished
+ self.endEditing true
+ end
+
+ def saveSettings
+ @user.username = @username.text
+ @user.password = @password.text
+ @user.save
+
+ @saveButton.setTitle "Saved", forState: UIControlStateNormal
+ self.endEditing true
+ end
+end
@@ -0,0 +1,9 @@
+describe "Application 'keychain_example'" do
+ before do
+ @app = UIApplication.sharedApplication
+ end
+
+ it "has one window" do
+ @app.windows.size.should == 1
+ end
+end
@@ -0,0 +1,22 @@
+<?xml version='1.0'?>
+<signatures version='1.0'>
+<class name='KeychainItemWrapper'>
+<method selector='initWithIdentifier:accessGroup:'>
+<arg name='identifier' declared_type='NSString*' type='@' index='0'/>
+<arg name='accessGroup' declared_type='NSString*' type='@' index='1'/>
+<retval declared_type='id' type='@'/>
+</method>
+<method selector='objectForKey:'>
+<arg name='key' declared_type='id' type='@' index='0'/>
+<retval declared_type='id' type='@'/>
+</method>
+<method selector='resetKeychainItem'>
+<retval declared_type='void' type='v'/>
+</method>
+<method selector='setObject:forKey:'>
+<arg name='inObject' declared_type='id' type='@' index='0'/>
+<arg name='key' declared_type='id' type='@' index='1'/>
+<retval declared_type='void' type='v'/>
+</method>
+</class>
+</signatures>
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'testlib' target in the 'testlib' project
+//
+
+#ifdef __OBJC__
+ #import <Foundation/Foundation.h>
+#endif
@@ -0,0 +1,67 @@
+/*
+ File: KeychainItemWrapper.h
+ Abstract:
+ Objective-C wrapper for accessing a single keychain item.
+
+ Version: 1.2 - ARCified - https://gist.github.com/1170641
+
+ Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
+ Inc. ("Apple") in consideration of your agreement to the following
+ terms, and your use, installation, modification or redistribution of
+ this Apple software constitutes acceptance of these terms. If you do
+ not agree with these terms, please do not use, install, modify or
+ redistribute this Apple software.
+
+ In consideration of your agreement to abide by the following terms, and
+ subject to these terms, Apple grants you a personal, non-exclusive
+ license, under Apple's copyrights in this original Apple software (the
+ "Apple Software"), to use, reproduce, modify and redistribute the Apple
+ Software, with or without modifications, in source and/or binary forms;
+ provided that if you redistribute the Apple Software in its entirety and
+ without modifications, you must retain this notice and the following
+ text and disclaimers in all such redistributions of the Apple Software.
+ Neither the name, trademarks, service marks or logos of Apple Inc. may
+ be used to endorse or promote products derived from the Apple Software
+ without specific prior written permission from Apple. Except as
+ expressly stated in this notice, no other rights or licenses, express or
+ implied, are granted by Apple herein, including but not limited to any
+ patent rights that may be infringed by your derivative works or by other
+ works in which the Apple Software may be incorporated.
+
+ The Apple Software is provided by Apple on an "AS IS" basis. APPLE
+ MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+ THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+ OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+ MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+ AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+ STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ Copyright (C) 2010 Apple Inc. All Rights Reserved.
+
+ */
+
+#import <UIKit/UIKit.h>
+
+/*
+ The KeychainItemWrapper class is an abstraction layer for the iPhone Keychain communication. It is merely a
+ simple wrapper to provide a distinct barrier between all the idiosyncracies involved with the Keychain
+ CF/NS container objects.
+ */
+@interface KeychainItemWrapper : NSObject
+
+// Designated initializer.
+- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *)accessGroup;
+- (void)setObject:(id)inObject forKey:(id)key;
+- (id)objectForKey:(id)key;
+
+// Initializes and resets the default generic keychain item data.
+- (void)resetKeychainItem;
+
+@end
Oops, something went wrong.

0 comments on commit c836dbb

Please sign in to comment.