Finalised App, Presentation and Report Commenced

This commit is contained in:
Alexander Davis
2017-05-06 02:17:09 +01:00
parent 32f42ec4db
commit 67e9bc1dde
378 changed files with 78554 additions and 952 deletions

1
Old My Mind/Cartfile Normal file
View File

@@ -0,0 +1 @@
github "ortuman/SwiftForms"

View File

@@ -0,0 +1 @@
github "ortuman/SwiftForms" "1.7"

19
Old My Mind/Carthage/Build/.SwiftForms.version generated vendored Normal file
View File

@@ -0,0 +1,19 @@
{
"commitish" : "1.7",
"iOS" : [
{
"hash" : "4b56df5067379e0e62b6efe3961c120e1ff4a0a68ca6fd123a2a8dd1743567db",
"name" : "SwiftForms"
}
],
"xcodeVersion" : "Xcode 8.3.1\nBuild version 8E1000a",
"watchOS" : [
],
"tvOS" : [
],
"Mac" : [
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleIdentifier</key>
<string>com.apple.xcode.dsym.com.ortulabs.SwiftForms</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>dSYM</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleShortVersionString</key>
<string>1.6.2</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@@ -0,0 +1,380 @@
// Generated by Apple Swift version 3.1 (swiftlang-802.0.51 clang-802.0.41)
#pragma clang diagnostic push
#if defined(__has_include) && __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif
#pragma clang diagnostic ignored "-Wauto-import"
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
# elif !defined(__cplusplus) || __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2 __attribute__((__ext_vector_type__(2)));
typedef float swift_float3 __attribute__((__ext_vector_type__(3)));
typedef float swift_float4 __attribute__((__ext_vector_type__(4)));
typedef double swift_double2 __attribute__((__ext_vector_type__(2)));
typedef double swift_double3 __attribute__((__ext_vector_type__(3)));
typedef double swift_double4 __attribute__((__ext_vector_type__(4)));
typedef int swift_int2 __attribute__((__ext_vector_type__(2)));
typedef int swift_int3 __attribute__((__ext_vector_type__(3)));
typedef int swift_int4 __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2 __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3 __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4 __attribute__((__ext_vector_type__(4)));
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
# define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
# define SWIFT_CLASS_PROPERTY(...)
# endif
#endif
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if defined(__has_attribute) && __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if defined(__has_attribute) && __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if defined(__has_attribute) && __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if defined(__has_attribute) && __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name) enum _name : _type _name; enum SWIFT_ENUM_EXTRA _name : _type
# if defined(__has_feature) && __has_feature(generalized_swift_name)
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_EXTRA _name : _type
# else
# define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME) SWIFT_ENUM(_type, _name)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if defined(__has_feature) && __has_feature(modules)
@import UIKit;
@import CoreGraphics;
@import ObjectiveC;
@import Foundation;
#endif
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
@class FormViewController;
@class NSCoder;
@class UIView;
@class UIResponder;
@class UIToolbar;
SWIFT_CLASS("_TtC10SwiftForms12FormBaseCell")
@interface FormBaseCell : UITableViewCell
@property (nonatomic, weak) FormViewController * _Nullable formViewController;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (void)configure;
- (void)update;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (UIResponder * _Nullable)firstResponderElement SWIFT_WARN_UNUSED_RESULT;
- (UIToolbar * _Nonnull)inputAccesoryView SWIFT_WARN_UNUSED_RESULT;
+ (CGFloat)formRowCellHeight SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)formRowCanBecomeFirstResponder SWIFT_WARN_UNUSED_RESULT;
+ (void)formViewController:(FormViewController * _Nonnull)formViewController didSelectRow:(FormBaseCell * _Nonnull)didSelectRow;
- (void)updateConstraints;
@end
@class UILabel;
SWIFT_CLASS("_TtC10SwiftForms13FormTitleCell")
@interface FormTitleCell : FormBaseCell
@property (nonatomic, readonly, strong) UILabel * _Nonnull titleLabel;
- (void)configure;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms14FormButtonCell")
@interface FormButtonCell : FormTitleCell
- (void)configure;
- (void)update;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms13FormCheckCell")
@interface FormCheckCell : FormTitleCell
- (void)configure;
- (void)update;
+ (void)formViewController:(FormViewController * _Nonnull)formViewController didSelectRow:(FormBaseCell * _Nonnull)selectedRow;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms13FormValueCell")
@interface FormValueCell : FormBaseCell
@property (nonatomic, readonly, strong) UILabel * _Nonnull titleLabel;
@property (nonatomic, readonly, strong) UILabel * _Nonnull valueLabel;
- (void)configure;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms12FormDateCell")
@interface FormDateCell : FormValueCell
- (void)configure;
- (void)update;
+ (void)formViewController:(FormViewController * _Nonnull)formViewController didSelectRow:(FormBaseCell * _Nonnull)selectedRow;
- (UIResponder * _Nullable)firstResponderElement SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)formRowCanBecomeFirstResponder SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_PROTOCOL("_TtP10SwiftForms12FormSelector_")
@protocol FormSelector <NSObject>
@property (nonatomic, strong) FormBaseCell * _Nullable formCell;
@end
@class NSBundle;
@class UITableView;
SWIFT_CLASS("_TtC10SwiftForms29FormOptionsSelectorController")
@interface FormOptionsSelectorController : UITableViewController <FormSelector>
@property (nonatomic, strong) FormBaseCell * _Nullable formCell;
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil SWIFT_UNAVAILABLE;
- (void)viewDidLoad;
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
- (nonnull instancetype)initWithStyle:(UITableViewStyle)style SWIFT_UNAVAILABLE;
@end
@class UIPickerView;
SWIFT_CLASS("_TtC10SwiftForms14FormPickerCell")
@interface FormPickerCell : FormValueCell <UIPickerViewDelegate, UIPickerViewDataSource>
- (void)configure;
- (void)update;
- (UIResponder * _Nullable)firstResponderElement SWIFT_WARN_UNUSED_RESULT;
+ (void)formViewController:(FormViewController * _Nonnull)formViewController didSelectRow:(FormBaseCell * _Nonnull)selectedRow;
- (NSString * _Nullable)pickerView:(UIPickerView * _Nonnull)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component SWIFT_WARN_UNUSED_RESULT;
- (void)pickerView:(UIPickerView * _Nonnull)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView * _Nonnull)pickerView SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)pickerView:(UIPickerView * _Nonnull)pickerView numberOfRowsInComponent:(NSInteger)component SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UISegmentedControl;
SWIFT_CLASS("_TtC10SwiftForms24FormSegmentedControlCell")
@interface FormSegmentedControlCell : FormBaseCell
@property (nonatomic, readonly, strong) UILabel * _Nonnull titleLabel;
@property (nonatomic, readonly, strong) UISegmentedControl * _Nonnull segmentedControl;
- (void)configure;
- (void)update;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms16FormSelectorCell")
@interface FormSelectorCell : FormValueCell
- (void)update;
+ (void)formViewController:(FormViewController * _Nonnull)formViewController didSelectRow:(FormBaseCell * _Nonnull)selectedRow;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UISlider;
SWIFT_CLASS("_TtC10SwiftForms14FormSliderCell")
@interface FormSliderCell : FormTitleCell
@property (nonatomic, readonly, strong) UISlider * _Nonnull sliderView;
- (void)configure;
- (void)update;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UIStepper;
SWIFT_CLASS("_TtC10SwiftForms15FormStepperCell")
@interface FormStepperCell : FormTitleCell
@property (nonatomic, readonly, strong) UIStepper * _Nonnull stepperView;
@property (nonatomic, readonly, strong) UILabel * _Nonnull countLabel;
- (void)configure;
- (void)update;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UISwitch;
SWIFT_CLASS("_TtC10SwiftForms14FormSwitchCell")
@interface FormSwitchCell : FormTitleCell
@property (nonatomic, readonly, strong) UISwitch * _Nonnull switchView;
- (void)configure;
- (void)update;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UITextField;
SWIFT_CLASS("_TtC10SwiftForms17FormTextFieldCell")
@interface FormTextFieldCell : FormBaseCell
@property (nonatomic, readonly, strong) UILabel * _Nonnull titleLabel;
@property (nonatomic, readonly, strong) UITextField * _Nonnull textField;
- (void)configure;
- (void)update;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (UIResponder * _Nullable)firstResponderElement SWIFT_WARN_UNUSED_RESULT;
+ (BOOL)formRowCanBecomeFirstResponder SWIFT_WARN_UNUSED_RESULT;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
@class UITextView;
SWIFT_CLASS("_TtC10SwiftForms16FormTextViewCell")
@interface FormTextViewCell : FormBaseCell <UITextViewDelegate>
@property (nonatomic, readonly, strong) UILabel * _Nonnull titleLabel;
@property (nonatomic, readonly, strong) UITextView * _Nonnull textField;
+ (CGFloat)formRowCellHeight SWIFT_WARN_UNUSED_RESULT;
- (void)configure;
- (void)update;
- (NSDictionary<NSString *, UIView *> * _Nonnull)constraintsViews SWIFT_WARN_UNUSED_RESULT;
- (NSArray<NSString *> * _Nonnull)defaultVisualConstraints SWIFT_WARN_UNUSED_RESULT;
- (void)textViewDidChange:(UITextView * _Nonnull)textView;
- (nonnull instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString * _Null_unspecified)reuseIdentifier OBJC_DESIGNATED_INITIALIZER;
- (nullable instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
@end
SWIFT_CLASS("_TtC10SwiftForms18FormViewController")
@interface FormViewController : UITableViewController
- (nonnull instancetype)init;
- (nonnull instancetype)initWithStyle:(UITableViewStyle)style OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil OBJC_DESIGNATED_INITIALIZER;
- (nonnull instancetype)initWithCoder:(NSCoder * _Nonnull)aDecoder OBJC_DESIGNATED_INITIALIZER;
- (void)viewDidLoad;
- (id _Nullable)valueForTag:(NSString * _Nonnull)tag SWIFT_WARN_UNUSED_RESULT;
- (void)setValue:(id _Nonnull)value forTag:(NSString * _Nonnull)tag;
- (NSInteger)numberOfSectionsInTableView:(UITableView * _Nonnull)tableView SWIFT_WARN_UNUSED_RESULT;
- (NSInteger)tableView:(UITableView * _Nonnull)tableView numberOfRowsInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (UITableViewCell * _Nonnull)tableView:(UITableView * _Nonnull)tableView cellForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)tableView:(UITableView * _Nonnull)tableView titleForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (NSString * _Nullable)tableView:(UITableView * _Nonnull)tableView titleForFooterInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (UIView * _Nullable)tableView:(UITableView * _Nonnull)tableView viewForFooterInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (UIView * _Nullable)tableView:(UITableView * _Nonnull)tableView viewForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForHeaderInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForFooterInSection:(NSInteger)section SWIFT_WARN_UNUSED_RESULT;
- (CGFloat)tableView:(UITableView * _Nonnull)tableView heightForRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath SWIFT_WARN_UNUSED_RESULT;
- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath;
@end
#pragma clang diagnostic pop

View File

@@ -0,0 +1,19 @@
//
// SwiftForms.h
// SwiftForms
//
// Created by Miguel Angel Ortuno Ortuno on 14/5/15.
// Copyright (c) 2015 Miguel Angel Ortuno Ortuno. All rights reserved.
//
#import <UIKit/UIKit.h>
//! Project version number for SwiftForms.
FOUNDATION_EXPORT double SwiftFormsVersionNumber;
//! Project version string for SwiftForms.
FOUNDATION_EXPORT const unsigned char SwiftFormsVersionString[];
// In this header, you should import all the public headers of your framework using statements like #import <SwiftForms/PublicHeader.h>

Binary file not shown.

View File

@@ -0,0 +1,10 @@
framework module SwiftForms {
umbrella header "SwiftForms.h"
export *
module * { export * }
}
module SwiftForms.Swift {
header "SwiftForms-Swift.h"
}

Binary file not shown.

View File

@@ -0,0 +1,60 @@
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Pods #
########
Pods/
# Xcode #
#########
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
*.xcworkspace
!default.xcworkspace
xcuserdata
profile
*.moved-aside
DerivedData
.idea/

View File

@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2014 Xmartlabs ( http://xmartlabs.com )
Copyright (c) 2014 Miguel Ángel Ortuño ( ortuman@gmail.com )
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.

View File

@@ -0,0 +1,622 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
0C9D1DF31D2267EE00909941 /* FormOptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C9D1DF21D2267EE00909941 /* FormOptionsViewController.swift */; };
0CB1F6C31C37F9B900CD2A7B /* FormErrorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CB1F6C21C37F9B900CD2A7B /* FormErrorType.swift */; };
0CCA33DD1B04FA5A006D9666 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA33DC1B04FA5A006D9666 /* AppDelegate.swift */; };
0CCA33DF1B04FA5A006D9666 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA33DE1B04FA5A006D9666 /* ViewController.swift */; };
0CCA33E21B04FA5A006D9666 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0CCA33E01B04FA5A006D9666 /* Main.storyboard */; };
0CCA33E41B04FA5A006D9666 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0CCA33E31B04FA5A006D9666 /* Images.xcassets */; };
0CCA34141B04FAD3006D9666 /* ExampleFormViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA33FC1B04FAD3006D9666 /* ExampleFormViewController.swift */; };
0CCA34311B04FBE0006D9666 /* SwiftForms.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CCA34301B04FBE0006D9666 /* SwiftForms.h */; settings = {ATTRIBUTES = (Public, ); }; };
0CCA34431B04FBE0006D9666 /* SwiftForms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CCA342C1B04FBDF006D9666 /* SwiftForms.framework */; };
0CCA34441B04FBE0006D9666 /* SwiftForms.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0CCA342C1B04FBDF006D9666 /* SwiftForms.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
0CCA34611B0502B5006D9666 /* Launch.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0CCA34601B0502B5006D9666 /* Launch.storyboard */; };
0CCA34781B050525006D9666 /* FormBaseCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34641B050525006D9666 /* FormBaseCell.swift */; };
0CCA34791B050525006D9666 /* FormTitleCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34651B050525006D9666 /* FormTitleCell.swift */; };
0CCA347A1B050525006D9666 /* FormValueCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34661B050525006D9666 /* FormValueCell.swift */; };
0CCA347B1B050525006D9666 /* FormButtonCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34671B050525006D9666 /* FormButtonCell.swift */; };
0CCA347C1B050525006D9666 /* FormCheckCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34681B050525006D9666 /* FormCheckCell.swift */; };
0CCA347D1B050525006D9666 /* FormDateCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34691B050525006D9666 /* FormDateCell.swift */; };
0CCA347E1B050525006D9666 /* FormPickerCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346A1B050525006D9666 /* FormPickerCell.swift */; };
0CCA347F1B050525006D9666 /* FormSegmentedControlCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346B1B050525006D9666 /* FormSegmentedControlCell.swift */; };
0CCA34801B050525006D9666 /* FormSelectorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346C1B050525006D9666 /* FormSelectorCell.swift */; };
0CCA34811B050525006D9666 /* FormSwitchCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346D1B050525006D9666 /* FormSwitchCell.swift */; };
0CCA34821B050525006D9666 /* FormTextFieldCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346E1B050525006D9666 /* FormTextFieldCell.swift */; };
0CCA34831B050525006D9666 /* FormTextViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA346F1B050525006D9666 /* FormTextViewCell.swift */; };
0CCA34851B050525006D9666 /* FormSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34721B050525006D9666 /* FormSelector.swift */; };
0CCA34861B050525006D9666 /* FormViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34731B050525006D9666 /* FormViewController.swift */; };
0CCA34871B050525006D9666 /* FormDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34751B050525006D9666 /* FormDescriptor.swift */; };
0CCA34881B050525006D9666 /* FormRowDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34761B050525006D9666 /* FormRowDescriptor.swift */; };
0CCA34891B050525006D9666 /* FormSectionDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CCA34771B050525006D9666 /* FormSectionDescriptor.swift */; };
0CDBB4F11B10699A00BE6ACF /* FormStepperCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CDBB4F01B10699A00BE6ACF /* FormStepperCell.swift */; };
0CDBB4F31B10724600BE6ACF /* FormSliderCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CDBB4F21B10724600BE6ACF /* FormSliderCell.swift */; };
BDD1087A1C925D14000EDEE5 /* FormLabelCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDD108791C925D14000EDEE5 /* FormLabelCell.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
0CCA34411B04FBE0006D9666 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 0CCA33CF1B04FA5A006D9666 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 0CCA342B1B04FBDF006D9666;
remoteInfo = SwiftForms;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
0CCA34481B04FBE0006D9666 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
0CCA34441B04FBE0006D9666 /* SwiftForms.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
0C9D1DF21D2267EE00909941 /* FormOptionsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormOptionsViewController.swift; sourceTree = "<group>"; };
0CB1F6C21C37F9B900CD2A7B /* FormErrorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormErrorType.swift; sourceTree = "<group>"; };
0CCA33D71B04FA5A006D9666 /* SwiftFormsApplication.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SwiftFormsApplication.app; sourceTree = BUILT_PRODUCTS_DIR; };
0CCA33DB1B04FA5A006D9666 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
0CCA33DC1B04FA5A006D9666 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
0CCA33DE1B04FA5A006D9666 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
0CCA33E11B04FA5A006D9666 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
0CCA33E31B04FA5A006D9666 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
0CCA33FC1B04FAD3006D9666 /* ExampleFormViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ExampleFormViewController.swift; sourceTree = "<group>"; };
0CCA342C1B04FBDF006D9666 /* SwiftForms.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftForms.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0CCA342F1B04FBE0006D9666 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
0CCA34301B04FBE0006D9666 /* SwiftForms.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwiftForms.h; sourceTree = "<group>"; };
0CCA343E1B04FBE0006D9666 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
0CCA343F1B04FBE0006D9666 /* SwiftFormsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftFormsTests.swift; sourceTree = "<group>"; };
0CCA34601B0502B5006D9666 /* Launch.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Launch.storyboard; sourceTree = "<group>"; };
0CCA34641B050525006D9666 /* FormBaseCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormBaseCell.swift; sourceTree = "<group>"; };
0CCA34651B050525006D9666 /* FormTitleCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormTitleCell.swift; sourceTree = "<group>"; };
0CCA34661B050525006D9666 /* FormValueCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormValueCell.swift; sourceTree = "<group>"; };
0CCA34671B050525006D9666 /* FormButtonCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormButtonCell.swift; sourceTree = "<group>"; };
0CCA34681B050525006D9666 /* FormCheckCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormCheckCell.swift; sourceTree = "<group>"; };
0CCA34691B050525006D9666 /* FormDateCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormDateCell.swift; sourceTree = "<group>"; };
0CCA346A1B050525006D9666 /* FormPickerCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormPickerCell.swift; sourceTree = "<group>"; };
0CCA346B1B050525006D9666 /* FormSegmentedControlCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSegmentedControlCell.swift; sourceTree = "<group>"; };
0CCA346C1B050525006D9666 /* FormSelectorCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSelectorCell.swift; sourceTree = "<group>"; };
0CCA346D1B050525006D9666 /* FormSwitchCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSwitchCell.swift; sourceTree = "<group>"; };
0CCA346E1B050525006D9666 /* FormTextFieldCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormTextFieldCell.swift; sourceTree = "<group>"; };
0CCA346F1B050525006D9666 /* FormTextViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormTextViewCell.swift; sourceTree = "<group>"; };
0CCA34721B050525006D9666 /* FormSelector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSelector.swift; sourceTree = "<group>"; };
0CCA34731B050525006D9666 /* FormViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormViewController.swift; sourceTree = "<group>"; };
0CCA34751B050525006D9666 /* FormDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormDescriptor.swift; sourceTree = "<group>"; };
0CCA34761B050525006D9666 /* FormRowDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormRowDescriptor.swift; sourceTree = "<group>"; };
0CCA34771B050525006D9666 /* FormSectionDescriptor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSectionDescriptor.swift; sourceTree = "<group>"; };
0CDBB4F01B10699A00BE6ACF /* FormStepperCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormStepperCell.swift; sourceTree = "<group>"; };
0CDBB4F21B10724600BE6ACF /* FormSliderCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormSliderCell.swift; sourceTree = "<group>"; };
BDD108791C925D14000EDEE5 /* FormLabelCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormLabelCell.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
0CCA33D41B04FA5A006D9666 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
0CCA34431B04FBE0006D9666 /* SwiftForms.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
0CCA34281B04FBDF006D9666 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0CCA33CE1B04FA5A006D9666 = {
isa = PBXGroup;
children = (
0CCA33D91B04FA5A006D9666 /* SwiftFormsApplication */,
0CCA342D1B04FBE0006D9666 /* SwiftForms */,
0CCA343C1B04FBE0006D9666 /* SwiftFormsTests */,
0CCA33D81B04FA5A006D9666 /* Products */,
);
sourceTree = "<group>";
};
0CCA33D81B04FA5A006D9666 /* Products */ = {
isa = PBXGroup;
children = (
0CCA33D71B04FA5A006D9666 /* SwiftFormsApplication.app */,
0CCA342C1B04FBDF006D9666 /* SwiftForms.framework */,
);
name = Products;
sourceTree = "<group>";
};
0CCA33D91B04FA5A006D9666 /* SwiftFormsApplication */ = {
isa = PBXGroup;
children = (
0CCA33FC1B04FAD3006D9666 /* ExampleFormViewController.swift */,
0CCA33DC1B04FA5A006D9666 /* AppDelegate.swift */,
0CCA33DE1B04FA5A006D9666 /* ViewController.swift */,
0CCA33E01B04FA5A006D9666 /* Main.storyboard */,
0CCA33E31B04FA5A006D9666 /* Images.xcassets */,
0CCA33DA1B04FA5A006D9666 /* Supporting Files */,
0CCA34601B0502B5006D9666 /* Launch.storyboard */,
);
path = SwiftFormsApplication;
sourceTree = "<group>";
};
0CCA33DA1B04FA5A006D9666 /* Supporting Files */ = {
isa = PBXGroup;
children = (
0CCA33DB1B04FA5A006D9666 /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
0CCA342D1B04FBE0006D9666 /* SwiftForms */ = {
isa = PBXGroup;
children = (
0CCA34621B050525006D9666 /* cells */,
0CCA34701B050525006D9666 /* controllers */,
0CCA34741B050525006D9666 /* descriptors */,
0CB1F6C21C37F9B900CD2A7B /* FormErrorType.swift */,
0CCA34301B04FBE0006D9666 /* SwiftForms.h */,
0CCA342E1B04FBE0006D9666 /* Supporting Files */,
);
path = SwiftForms;
sourceTree = "<group>";
};
0CCA342E1B04FBE0006D9666 /* Supporting Files */ = {
isa = PBXGroup;
children = (
0CCA342F1B04FBE0006D9666 /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
0CCA343C1B04FBE0006D9666 /* SwiftFormsTests */ = {
isa = PBXGroup;
children = (
0CCA343F1B04FBE0006D9666 /* SwiftFormsTests.swift */,
0CCA343D1B04FBE0006D9666 /* Supporting Files */,
);
path = SwiftFormsTests;
sourceTree = "<group>";
};
0CCA343D1B04FBE0006D9666 /* Supporting Files */ = {
isa = PBXGroup;
children = (
0CCA343E1B04FBE0006D9666 /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
0CCA34621B050525006D9666 /* cells */ = {
isa = PBXGroup;
children = (
0CCA34631B050525006D9666 /* base */,
0CCA34671B050525006D9666 /* FormButtonCell.swift */,
BDD108791C925D14000EDEE5 /* FormLabelCell.swift */,
0CCA34681B050525006D9666 /* FormCheckCell.swift */,
0CCA34691B050525006D9666 /* FormDateCell.swift */,
0CCA346A1B050525006D9666 /* FormPickerCell.swift */,
0CCA346B1B050525006D9666 /* FormSegmentedControlCell.swift */,
0CCA346C1B050525006D9666 /* FormSelectorCell.swift */,
0CCA346D1B050525006D9666 /* FormSwitchCell.swift */,
0CCA346E1B050525006D9666 /* FormTextFieldCell.swift */,
0CCA346F1B050525006D9666 /* FormTextViewCell.swift */,
0CDBB4F01B10699A00BE6ACF /* FormStepperCell.swift */,
0CDBB4F21B10724600BE6ACF /* FormSliderCell.swift */,
);
path = cells;
sourceTree = "<group>";
};
0CCA34631B050525006D9666 /* base */ = {
isa = PBXGroup;
children = (
0CCA34641B050525006D9666 /* FormBaseCell.swift */,
0CCA34651B050525006D9666 /* FormTitleCell.swift */,
0CCA34661B050525006D9666 /* FormValueCell.swift */,
);
path = base;
sourceTree = "<group>";
};
0CCA34701B050525006D9666 /* controllers */ = {
isa = PBXGroup;
children = (
0CCA34721B050525006D9666 /* FormSelector.swift */,
0CCA34731B050525006D9666 /* FormViewController.swift */,
0C9D1DF21D2267EE00909941 /* FormOptionsViewController.swift */,
);
path = controllers;
sourceTree = "<group>";
};
0CCA34741B050525006D9666 /* descriptors */ = {
isa = PBXGroup;
children = (
0CCA34751B050525006D9666 /* FormDescriptor.swift */,
0CCA34761B050525006D9666 /* FormRowDescriptor.swift */,
0CCA34771B050525006D9666 /* FormSectionDescriptor.swift */,
);
path = descriptors;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
0CCA34291B04FBDF006D9666 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
0CCA34311B04FBE0006D9666 /* SwiftForms.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
0CCA33D61B04FA5A006D9666 /* SwiftFormsApplication */ = {
isa = PBXNativeTarget;
buildConfigurationList = 0CCA33F61B04FA5A006D9666 /* Build configuration list for PBXNativeTarget "SwiftFormsApplication" */;
buildPhases = (
0CCA33D31B04FA5A006D9666 /* Sources */,
0CCA33D41B04FA5A006D9666 /* Frameworks */,
0CCA33D51B04FA5A006D9666 /* Resources */,
0CCA34481B04FBE0006D9666 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
0CCA34421B04FBE0006D9666 /* PBXTargetDependency */,
);
name = SwiftFormsApplication;
productName = SwiftFormsApplication;
productReference = 0CCA33D71B04FA5A006D9666 /* SwiftFormsApplication.app */;
productType = "com.apple.product-type.application";
};
0CCA342B1B04FBDF006D9666 /* SwiftForms */ = {
isa = PBXNativeTarget;
buildConfigurationList = 0CCA34451B04FBE0006D9666 /* Build configuration list for PBXNativeTarget "SwiftForms" */;
buildPhases = (
0CCA34271B04FBDF006D9666 /* Sources */,
0CCA34281B04FBDF006D9666 /* Frameworks */,
0CCA34291B04FBDF006D9666 /* Headers */,
0CCA342A1B04FBDF006D9666 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = SwiftForms;
productName = SwiftForms;
productReference = 0CCA342C1B04FBDF006D9666 /* SwiftForms.framework */;
productType = "com.apple.product-type.framework";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
0CCA33CF1B04FA5A006D9666 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftMigration = 0700;
LastSwiftUpdateCheck = 0700;
LastUpgradeCheck = 0800;
ORGANIZATIONNAME = "Miguel Angel Ortuno Ortuno";
TargetAttributes = {
0CCA33D61B04FA5A006D9666 = {
CreatedOnToolsVersion = 6.3.1;
LastSwiftMigration = 0800;
};
0CCA342B1B04FBDF006D9666 = {
CreatedOnToolsVersion = 6.3.1;
LastSwiftMigration = 0800;
};
};
};
buildConfigurationList = 0CCA33D21B04FA5A006D9666 /* Build configuration list for PBXProject "SwiftFormsApplication" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 0CCA33CE1B04FA5A006D9666;
productRefGroup = 0CCA33D81B04FA5A006D9666 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
0CCA33D61B04FA5A006D9666 /* SwiftFormsApplication */,
0CCA342B1B04FBDF006D9666 /* SwiftForms */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
0CCA33D51B04FA5A006D9666 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0CCA33E21B04FA5A006D9666 /* Main.storyboard in Resources */,
0CCA34611B0502B5006D9666 /* Launch.storyboard in Resources */,
0CCA33E41B04FA5A006D9666 /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
0CCA342A1B04FBDF006D9666 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
0CCA33D31B04FA5A006D9666 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0CCA33DF1B04FA5A006D9666 /* ViewController.swift in Sources */,
0CCA34141B04FAD3006D9666 /* ExampleFormViewController.swift in Sources */,
0CCA33DD1B04FA5A006D9666 /* AppDelegate.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
0CCA34271B04FBDF006D9666 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
0CCA34851B050525006D9666 /* FormSelector.swift in Sources */,
0CCA34791B050525006D9666 /* FormTitleCell.swift in Sources */,
0CDBB4F31B10724600BE6ACF /* FormSliderCell.swift in Sources */,
0CCA34891B050525006D9666 /* FormSectionDescriptor.swift in Sources */,
0CCA34871B050525006D9666 /* FormDescriptor.swift in Sources */,
0CCA34781B050525006D9666 /* FormBaseCell.swift in Sources */,
BDD1087A1C925D14000EDEE5 /* FormLabelCell.swift in Sources */,
0CCA34831B050525006D9666 /* FormTextViewCell.swift in Sources */,
0CB1F6C31C37F9B900CD2A7B /* FormErrorType.swift in Sources */,
0CCA34861B050525006D9666 /* FormViewController.swift in Sources */,
0CCA347B1B050525006D9666 /* FormButtonCell.swift in Sources */,
0CDBB4F11B10699A00BE6ACF /* FormStepperCell.swift in Sources */,
0CCA34801B050525006D9666 /* FormSelectorCell.swift in Sources */,
0CCA34811B050525006D9666 /* FormSwitchCell.swift in Sources */,
0CCA347C1B050525006D9666 /* FormCheckCell.swift in Sources */,
0CCA347A1B050525006D9666 /* FormValueCell.swift in Sources */,
0CCA347F1B050525006D9666 /* FormSegmentedControlCell.swift in Sources */,
0CCA34821B050525006D9666 /* FormTextFieldCell.swift in Sources */,
0CCA347E1B050525006D9666 /* FormPickerCell.swift in Sources */,
0C9D1DF31D2267EE00909941 /* FormOptionsViewController.swift in Sources */,
0CCA347D1B050525006D9666 /* FormDateCell.swift in Sources */,
0CCA34881B050525006D9666 /* FormRowDescriptor.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
0CCA34421B04FBE0006D9666 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 0CCA342B1B04FBDF006D9666 /* SwiftForms */;
targetProxy = 0CCA34411B04FBE0006D9666 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
0CCA33E01B04FA5A006D9666 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
0CCA33E11B04FA5A006D9666 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
0CCA33F41B04FA5A006D9666 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
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;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
0CCA33F51B04FA5A006D9666 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
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;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
0CCA33F71B04FA5A006D9666 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = SwiftFormsApplication/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ortulabs.SwiftFormsApplication;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
0CCA33F81B04FA5A006D9666 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = SwiftFormsApplication/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = com.ortulabs.SwiftFormsApplication;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Release;
};
0CCA34461B04FBE0006D9666 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = SwiftForms/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ortulabs.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Debug;
};
0CCA34471B04FBE0006D9666 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
CURRENT_PROJECT_VERSION = 1;
DEFINES_MODULE = YES;
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
INFOPLIST_FILE = SwiftForms/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "com.ortulabs.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_VERSION = 3.0;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
0CCA33D21B04FA5A006D9666 /* Build configuration list for PBXProject "SwiftFormsApplication" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0CCA33F41B04FA5A006D9666 /* Debug */,
0CCA33F51B04FA5A006D9666 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
0CCA33F61B04FA5A006D9666 /* Build configuration list for PBXNativeTarget "SwiftFormsApplication" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0CCA33F71B04FA5A006D9666 /* Debug */,
0CCA33F81B04FA5A006D9666 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
0CCA34451B04FBE0006D9666 /* Build configuration list for PBXNativeTarget "SwiftForms" */ = {
isa = XCConfigurationList;
buildConfigurations = (
0CCA34461B04FBE0006D9666 /* Debug */,
0CCA34471B04FBE0006D9666 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 0CCA33CF1B04FA5A006D9666 /* Project object */;
}

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0800"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0CCA342B1B04FBDF006D9666"
BuildableName = "SwiftForms.framework"
BlueprintName = "SwiftForms"
ReferencedContainer = "container:SwiftFormsApplication.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0CCA342B1B04FBDF006D9666"
BuildableName = "SwiftForms.framework"
BlueprintName = "SwiftForms"
ReferencedContainer = "container:SwiftFormsApplication.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "0CCA342B1B04FBDF006D9666"
BuildableName = "SwiftForms.framework"
BlueprintName = "SwiftForms"
ReferencedContainer = "container:SwiftFormsApplication.xcodeproj">
</BuildableReference>
</MacroExpansion>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,35 @@
//
// AppDelegate.swift
// SwiftForms
//
// Created by Miguel Angel Ortuno on 20/08/14.
// Copyright (c) 2014 Miguel Angel Ortuño. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
private func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : Any]?) -> Bool {
return true
}
func applicationWillResignActive(_ application: UIApplication) {
}
func applicationDidEnterBackground(_ application: UIApplication) {
}
func applicationWillEnterForeground(_ application: UIApplication) {
}
func applicationDidBecomeActive(_ application: UIApplication) {
}
func applicationWillTerminate(_ application: UIApplication) {
}
}

View File

@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="2fJ-Vj-Fx4">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
</dependencies>
<scenes>
<!--Root View Controller-->
<scene sceneID="prn-mK-S9o">
<objects>
<tableViewController id="cOw-JX-PpI" customClass="ExampleFormViewController" customModule="SwiftFormsApplication" customModuleProvider="target" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="Dpr-KM-eKs">
<rect key="frame" x="0.0" y="0.0" width="320" height="518"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" cocoaTouchSystemColor="groupTableViewBackgroundColor"/>
<connections>
<outlet property="dataSource" destination="cOw-JX-PpI" id="zuU-br-WUC"/>
<outlet property="delegate" destination="cOw-JX-PpI" id="2Oh-6L-e8h"/>
</connections>
</tableView>
<navigationItem key="navigationItem" title="Root View Controller" id="W98-Fb-phH"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<size key="freeformSize" width="320" height="518"/>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="ndw-47-Ukh" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-166" y="423.75"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="4el-7P-abp">
<objects>
<navigationController id="2fJ-Vj-Fx4" sceneMemberID="viewController">
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<size key="freeformSize" width="320" height="518"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="l3z-Dv-0Yo">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<connections>
<segue destination="cOw-JX-PpI" kind="relationship" relationship="rootViewController" id="nL3-AH-WsZ"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="k9y-Jx-GyC" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-816" y="424"/>
</scene>
</scenes>
</document>

View File

@@ -0,0 +1,211 @@
//
// ExampleFormViewController.swift
// SwiftForms
//®
// Created by Miguel Angel Ortuno on 20/08/14.
// Copyright (c) 2014 Miguel Angel Ortuño. All rights reserved.
//
import UIKit
import SwiftForms
class ExampleFormViewController: FormViewController {
struct Static {
static let nameTag = "name"
static let passwordTag = "password"
static let lastNameTag = "lastName"
static let jobTag = "job"
static let emailTag = "email"
static let URLTag = "url"
static let phoneTag = "phone"
static let enabled = "enabled"
static let check = "check"
static let segmented = "segmented"
static let picker = "picker"
static let birthday = "birthday"
static let categories = "categories"
static let button = "button"
static let stepper = "stepper"
static let slider = "slider"
static let textView = "textview"
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadForm()
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Submit", style: .plain, target: self, action: #selector(ExampleFormViewController.submit(_:)))
}
// MARK: Actions
func submit(_: UIBarButtonItem!) {
let message = self.form.formValues().description
let alertController = UIAlertController(title: "Form output", message: message, preferredStyle: .alert)
let cancel = UIAlertAction(title: "OK", style: .cancel) { (action) in
}
alertController.addAction(cancel)
self.present(alertController, animated: true, completion: nil)
}
// MARK: Private interface
fileprivate func loadForm() {
let form = FormDescriptor(title: "Example Form")
let section1 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
var row = FormRowDescriptor(tag: Static.emailTag, type: .email, title: "Email")
row.configuration.cell.appearance = ["textField.placeholder" : "john@gmail.com" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section1.rows.append(row)
row = FormRowDescriptor(tag: Static.passwordTag, type: .password, title: "Password")
row.configuration.cell.appearance = ["textField.placeholder" : "Enter password" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section1.rows.append(row)
let section2 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
row = FormRowDescriptor(tag: Static.nameTag, type: .name, title: "First Name")
row.configuration.cell.appearance = ["textField.placeholder" : "e.g. Miguel Ángel" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.lastNameTag, type: .name, title: "Last Name")
row.configuration.cell.appearance = ["textField.placeholder" : "e.g. Ortuño" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.jobTag, type: .text, title: "Job")
row.configuration.cell.appearance = ["textField.placeholder" : "e.g. Entrepreneur" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
let section3 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
row = FormRowDescriptor(tag: Static.URLTag, type: .url, title: "URL")
row.configuration.cell.appearance = ["textField.placeholder" : "e.g. gethooksapp.com" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section3.rows.append(row)
row = FormRowDescriptor(tag: Static.phoneTag, type: .phone, title: "Phone")
row.configuration.cell.appearance = ["textField.placeholder" : "e.g. 0034666777999" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section3.rows.append(row)
let section4 = FormSectionDescriptor(headerTitle: "An example header title", footerTitle: "An example footer title")
row = FormRowDescriptor(tag: Static.enabled, type: .booleanSwitch, title: "Enable")
section4.rows.append(row)
row = FormRowDescriptor(tag: Static.check, type: .booleanCheck, title: "Doable")
section4.rows.append(row)
row = FormRowDescriptor(tag: Static.segmented, type: .segmentedControl, title: "Priority")
row.configuration.selection.options = ([0, 1, 2, 3] as [Int]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? Int else { return "" }
switch option {
case 0:
return "None"
case 1:
return "!"
case 2:
return "!!"
case 3:
return "!!!"
default:
return ""
}
}
row.configuration.cell.appearance = ["titleLabel.font" : UIFont.boldSystemFont(ofSize: 30.0), "segmentedControl.tintColor" : UIColor.red]
section4.rows.append(row)
let section5 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
row = FormRowDescriptor(tag: Static.picker, type: .picker, title: "Gender")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["F", "M", "U"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "F":
return "Female"
case "M":
return "Male"
case "U":
return "I'd rather not to say"
default:
return ""
}
}
row.value = "M" as AnyObject
section5.rows.append(row)
row = FormRowDescriptor(tag: Static.birthday, type: .date, title: "Birthday")
row.configuration.cell.showsInputToolbar = true
section5.rows.append(row)
row = FormRowDescriptor(tag: Static.categories, type: .multipleSelector, title: "Categories")
row.configuration.selection.options = ([0, 1, 2, 3, 4] as [Int]) as [AnyObject]
row.configuration.selection.allowsMultipleSelection = true
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? Int else { return "" }
switch option {
case 0:
return "Restaurant"
case 1:
return "Pub"
case 2:
return "Shop"
case 3:
return "Hotel"
case 4:
return "Camping"
default:
return ""
}
}
section5.rows.append(row)
let section6 = FormSectionDescriptor(headerTitle: "Stepper & Slider", footerTitle: nil)
row = FormRowDescriptor(tag: Static.stepper, type: .stepper, title: "Step count")
row.configuration.stepper.maximumValue = 200.0
row.configuration.stepper.minimumValue = 20.0
row.configuration.stepper.steps = 2.0
section6.rows.append(row)
row = FormRowDescriptor(tag: Static.slider, type: .slider, title: "Slider")
row.configuration.stepper.maximumValue = 200.0
row.configuration.stepper.minimumValue = 20.0
row.configuration.stepper.steps = 2.0
row.value = 0.5 as AnyObject
section6.rows.append(row)
let section7 = FormSectionDescriptor(headerTitle: "Multiline TextView", footerTitle: nil)
row = FormRowDescriptor(tag: Static.textView, type: .multilineText, title: "Notes")
section7.rows.append(row)
let section8 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
row = FormRowDescriptor(tag: Static.button, type: .button, title: "Dismiss")
row.configuration.button.didSelectClosure = { _ in
self.view.endEditing(true)
}
section8.rows.append(row)
form.sections = [section1, section2, section3, section4, section5, section6, section7, section8]
self.form = form
}
}

View File

@@ -0,0 +1,68 @@
{
"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"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -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>Launch</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,23 @@
//
// ViewController.swift
// SwiftFormsApplication
//
// Created by Miguel Angel Ortuno Ortuno on 14/5/15.
// Copyright (c) 2015 Miguel Angel Ortuno Ortuno. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

View File

@@ -0,0 +1,810 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
152A166A0FC11FBAD96716A2 /* Pods_My_Mind.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93C68F08F6A96A8862C1AC2F /* Pods_My_Mind.framework */; };
5F1D73F11E9AA390001ED9FC /* UserViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73E91E9AA390001ED9FC /* UserViews.swift */; };
5F1D73F31E9AA390001ED9FC /* ForumView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73EB1E9AA390001ED9FC /* ForumView.swift */; };
5F1D73F41E9AA390001ED9FC /* TabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73EC1E9AA390001ED9FC /* TabBarController.swift */; };
5F1D73F51E9AA390001ED9FC /* OnBoardingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73ED1E9AA390001ED9FC /* OnBoardingController.swift */; };
5F1D73F61E9AA390001ED9FC /* WelcomeScreenOne.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73EE1E9AA390001ED9FC /* WelcomeScreenOne.swift */; };
5F1D73F71E9AA390001ED9FC /* WelcomeScreenTwo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73EF1E9AA390001ED9FC /* WelcomeScreenTwo.swift */; };
5F1D73F81E9AA390001ED9FC /* WelcomeScreenThree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F1D73F01E9AA390001ED9FC /* WelcomeScreenThree.swift */; };
5F387B2C1E9A77F900308C34 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F387B2B1E9A77F900308C34 /* AppDelegate.swift */; };
5F387B311E9A77F900308C34 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F387B2F1E9A77F900308C34 /* Main.storyboard */; };
5F387B331E9A77F900308C34 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5F387B321E9A77F900308C34 /* Assets.xcassets */; };
5F387B361E9A77F900308C34 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5F387B341E9A77F900308C34 /* LaunchScreen.storyboard */; };
5F387B411E9A77FA00308C34 /* My_MindTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F387B401E9A77FA00308C34 /* My_MindTests.swift */; };
5F387B4C1E9A77FA00308C34 /* My_MindUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F387B4B1E9A77FA00308C34 /* My_MindUITests.swift */; };
5F8BB68D1E9F236200E974F0 /* SwiftForms.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F8BB68C1E9F236200E974F0 /* SwiftForms.framework */; };
5FAC04911E9AD1F60034DF77 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5FAC04901E9AD1F60034DF77 /* GoogleService-Info.plist */; };
5FAC04931E9AD2110034DF77 /* MainViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAC04921E9AD2110034DF77 /* MainViews.swift */; };
5FAC04951E9ADF4B0034DF77 /* OnlineInterfaces.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FAC04941E9ADF4B0034DF77 /* OnlineInterfaces.swift */; };
5FB7C4491E9D1CBC001F76FF /* FormViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FB7C4481E9D1CBC001F76FF /* FormViews.swift */; };
9F9B713CD43BCBAED3E243FD /* Pods_My_MindUITests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5B889C48504658B7AAD00E1 /* Pods_My_MindUITests.framework */; };
CE88ED407E8DD8526D09D9D6 /* Pods_My_MindTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A806CCC70D68E5C00FEA546B /* Pods_My_MindTests.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
5F387B3D1E9A77FA00308C34 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5F387B201E9A77F900308C34 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 5F387B271E9A77F900308C34;
remoteInfo = "My Mind";
};
5F387B481E9A77FA00308C34 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 5F387B201E9A77F900308C34 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 5F387B271E9A77F900308C34;
remoteInfo = "My Mind";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
03237502A99BD1B8640610FB /* Pods-My Mind.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My Mind.debug.xcconfig"; path = "Pods/Target Support Files/Pods-My Mind/Pods-My Mind.debug.xcconfig"; sourceTree = "<group>"; };
14A46FE3E7F911FF9F206D9F /* Pods-My Mind.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My Mind.release.xcconfig"; path = "Pods/Target Support Files/Pods-My Mind/Pods-My Mind.release.xcconfig"; sourceTree = "<group>"; };
24CEC2F2536D3F042ACE49E8 /* Pods-My MindTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My MindTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-My MindTests/Pods-My MindTests.release.xcconfig"; sourceTree = "<group>"; };
5F1D73E91E9AA390001ED9FC /* UserViews.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserViews.swift; sourceTree = "<group>"; };
5F1D73EB1E9AA390001ED9FC /* ForumView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ForumView.swift; sourceTree = "<group>"; };
5F1D73EC1E9AA390001ED9FC /* TabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TabBarController.swift; sourceTree = "<group>"; };
5F1D73ED1E9AA390001ED9FC /* OnBoardingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnBoardingController.swift; sourceTree = "<group>"; };
5F1D73EE1E9AA390001ED9FC /* WelcomeScreenOne.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeScreenOne.swift; sourceTree = "<group>"; };
5F1D73EF1E9AA390001ED9FC /* WelcomeScreenTwo.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeScreenTwo.swift; sourceTree = "<group>"; };
5F1D73F01E9AA390001ED9FC /* WelcomeScreenThree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeScreenThree.swift; sourceTree = "<group>"; };
5F387B281E9A77F900308C34 /* My Mind.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "My Mind.app"; sourceTree = BUILT_PRODUCTS_DIR; };
5F387B2B1E9A77F900308C34 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
5F387B301E9A77F900308C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
5F387B321E9A77F900308C34 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
5F387B351E9A77F900308C34 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
5F387B371E9A77F900308C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5F387B3C1E9A77FA00308C34 /* My MindTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "My MindTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
5F387B401E9A77FA00308C34 /* My_MindTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = My_MindTests.swift; sourceTree = "<group>"; };
5F387B421E9A77FA00308C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5F387B471E9A77FA00308C34 /* My MindUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "My MindUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
5F387B4B1E9A77FA00308C34 /* My_MindUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = My_MindUITests.swift; sourceTree = "<group>"; };
5F387B4D1E9A77FA00308C34 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5F8BB68C1E9F236200E974F0 /* SwiftForms.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftForms.framework; path = "../../../../Users/alexanderdavis/Library/Developer/Xcode/DerivedData/My_Mind-coocqdarohmftwesbfhoxeppuecq/Build/Products/Debug-iphoneos/SwiftForms/SwiftForms.framework"; sourceTree = "<group>"; };
5FAC048F1E9ACFA10034DF77 /* My Mind.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "My Mind.entitlements"; sourceTree = "<group>"; };
5FAC04901E9AD1F60034DF77 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
5FAC04921E9AD2110034DF77 /* MainViews.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainViews.swift; sourceTree = "<group>"; };
5FAC04941E9ADF4B0034DF77 /* OnlineInterfaces.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnlineInterfaces.swift; sourceTree = "<group>"; };
5FB7C4481E9D1CBC001F76FF /* FormViews.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormViews.swift; sourceTree = "<group>"; };
93C68F08F6A96A8862C1AC2F /* Pods_My_Mind.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_My_Mind.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A806CCC70D68E5C00FEA546B /* Pods_My_MindTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_My_MindTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
ABF283DEA18DADABFE6E9651 /* Pods-My MindUITests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My MindUITests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-My MindUITests/Pods-My MindUITests.debug.xcconfig"; sourceTree = "<group>"; };
ACB04384CBCB9A221EBE6FF4 /* Pods-My MindTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My MindTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-My MindTests/Pods-My MindTests.debug.xcconfig"; sourceTree = "<group>"; };
B5B889C48504658B7AAD00E1 /* Pods_My_MindUITests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_My_MindUITests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E83680762934A4609FB47468 /* Pods-My MindUITests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-My MindUITests.release.xcconfig"; path = "Pods/Target Support Files/Pods-My MindUITests/Pods-My MindUITests.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
5F387B251E9A77F900308C34 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
152A166A0FC11FBAD96716A2 /* Pods_My_Mind.framework in Frameworks */,
5F8BB68D1E9F236200E974F0 /* SwiftForms.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B391E9A77FA00308C34 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
CE88ED407E8DD8526D09D9D6 /* Pods_My_MindTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B441E9A77FA00308C34 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
9F9B713CD43BCBAED3E243FD /* Pods_My_MindUITests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
5F1D73F91E9AA39D001ED9FC /* OnBoarding Controllers */ = {
isa = PBXGroup;
children = (
5F1D73ED1E9AA390001ED9FC /* OnBoardingController.swift */,
5F1D73EE1E9AA390001ED9FC /* WelcomeScreenOne.swift */,
5F1D73EF1E9AA390001ED9FC /* WelcomeScreenTwo.swift */,
5F1D73F01E9AA390001ED9FC /* WelcomeScreenThree.swift */,
);
name = "OnBoarding Controllers";
sourceTree = "<group>";
};
5F1D73FA1E9AA3AD001ED9FC /* Main Controllers */ = {
isa = PBXGroup;
children = (
5F1D73EB1E9AA390001ED9FC /* ForumView.swift */,
5F1D73EC1E9AA390001ED9FC /* TabBarController.swift */,
5FAC04921E9AD2110034DF77 /* MainViews.swift */,
5FB7C4481E9D1CBC001F76FF /* FormViews.swift */,
);
name = "Main Controllers";
sourceTree = "<group>";
};
5F387B1F1E9A77F900308C34 = {
isa = PBXGroup;
children = (
5F387B2A1E9A77F900308C34 /* My Mind */,
5F387B3F1E9A77FA00308C34 /* My MindTests */,
5F387B4A1E9A77FA00308C34 /* My MindUITests */,
5F387B291E9A77F900308C34 /* Products */,
7425378B698F58AB6B65A764 /* Pods */,
D0433EACB48AF6CF532A5819 /* Frameworks */,
);
sourceTree = "<group>";
};
5F387B291E9A77F900308C34 /* Products */ = {
isa = PBXGroup;
children = (
5F387B281E9A77F900308C34 /* My Mind.app */,
5F387B3C1E9A77FA00308C34 /* My MindTests.xctest */,
5F387B471E9A77FA00308C34 /* My MindUITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
5F387B2A1E9A77F900308C34 /* My Mind */ = {
isa = PBXGroup;
children = (
5FAC048F1E9ACFA10034DF77 /* My Mind.entitlements */,
5FAC04901E9AD1F60034DF77 /* GoogleService-Info.plist */,
5F387B371E9A77F900308C34 /* Info.plist */,
5F387B2B1E9A77F900308C34 /* AppDelegate.swift */,
5F1D73E91E9AA390001ED9FC /* UserViews.swift */,
5FAC04941E9ADF4B0034DF77 /* OnlineInterfaces.swift */,
5F387B321E9A77F900308C34 /* Assets.xcassets */,
5F387B341E9A77F900308C34 /* LaunchScreen.storyboard */,
5F1D73FA1E9AA3AD001ED9FC /* Main Controllers */,
5F387B2F1E9A77F900308C34 /* Main.storyboard */,
5F1D73F91E9AA39D001ED9FC /* OnBoarding Controllers */,
);
path = "My Mind";
sourceTree = "<group>";
};
5F387B3F1E9A77FA00308C34 /* My MindTests */ = {
isa = PBXGroup;
children = (
5F387B401E9A77FA00308C34 /* My_MindTests.swift */,
5F387B421E9A77FA00308C34 /* Info.plist */,
);
path = "My MindTests";
sourceTree = "<group>";
};
5F387B4A1E9A77FA00308C34 /* My MindUITests */ = {
isa = PBXGroup;
children = (
5F387B4B1E9A77FA00308C34 /* My_MindUITests.swift */,
5F387B4D1E9A77FA00308C34 /* Info.plist */,
);
path = "My MindUITests";
sourceTree = "<group>";
};
7425378B698F58AB6B65A764 /* Pods */ = {
isa = PBXGroup;
children = (
03237502A99BD1B8640610FB /* Pods-My Mind.debug.xcconfig */,
14A46FE3E7F911FF9F206D9F /* Pods-My Mind.release.xcconfig */,
ACB04384CBCB9A221EBE6FF4 /* Pods-My MindTests.debug.xcconfig */,
24CEC2F2536D3F042ACE49E8 /* Pods-My MindTests.release.xcconfig */,
ABF283DEA18DADABFE6E9651 /* Pods-My MindUITests.debug.xcconfig */,
E83680762934A4609FB47468 /* Pods-My MindUITests.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
};
D0433EACB48AF6CF532A5819 /* Frameworks */ = {
isa = PBXGroup;
children = (
5F8BB68C1E9F236200E974F0 /* SwiftForms.framework */,
93C68F08F6A96A8862C1AC2F /* Pods_My_Mind.framework */,
A806CCC70D68E5C00FEA546B /* Pods_My_MindTests.framework */,
B5B889C48504658B7AAD00E1 /* Pods_My_MindUITests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
5F387B271E9A77F900308C34 /* My Mind */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5F387B501E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My Mind" */;
buildPhases = (
1527ACBB4520742D6833DFDD /* [CP] Check Pods Manifest.lock */,
5F387B241E9A77F900308C34 /* Sources */,
5F387B251E9A77F900308C34 /* Frameworks */,
5F387B261E9A77F900308C34 /* Resources */,
43471D3845F376B7B6A61722 /* [CP] Embed Pods Frameworks */,
0C96D1A6FC50BBF2F94C13C8 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
);
name = "My Mind";
productName = "My Mind";
productReference = 5F387B281E9A77F900308C34 /* My Mind.app */;
productType = "com.apple.product-type.application";
};
5F387B3B1E9A77FA00308C34 /* My MindTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5F387B531E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My MindTests" */;
buildPhases = (
247238A8EA84F82BF46D3FAE /* [CP] Check Pods Manifest.lock */,
5F387B381E9A77FA00308C34 /* Sources */,
5F387B391E9A77FA00308C34 /* Frameworks */,
5F387B3A1E9A77FA00308C34 /* Resources */,
B649BBA2ADA126A145C221ED /* [CP] Embed Pods Frameworks */,
9C78D3E78C9188955EBE7FE3 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
5F387B3E1E9A77FA00308C34 /* PBXTargetDependency */,
);
name = "My MindTests";
productName = "My MindTests";
productReference = 5F387B3C1E9A77FA00308C34 /* My MindTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
5F387B461E9A77FA00308C34 /* My MindUITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 5F387B561E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My MindUITests" */;
buildPhases = (
BE15E72E75C38FE0DBC03AFB /* [CP] Check Pods Manifest.lock */,
5F387B431E9A77FA00308C34 /* Sources */,
5F387B441E9A77FA00308C34 /* Frameworks */,
5F387B451E9A77FA00308C34 /* Resources */,
F00EC5C8C3737A67F05C83EC /* [CP] Embed Pods Frameworks */,
9805D1E59AA2B694E996F40B /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
5F387B491E9A77FA00308C34 /* PBXTargetDependency */,
);
name = "My MindUITests";
productName = "My MindUITests";
productReference = 5F387B471E9A77FA00308C34 /* My MindUITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
5F387B201E9A77F900308C34 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 0830;
LastUpgradeCheck = 0830;
ORGANIZATIONNAME = "Alexander Davis";
TargetAttributes = {
5F387B271E9A77F900308C34 = {
CreatedOnToolsVersion = 8.3.1;
DevelopmentTeam = 28CC8SCVUN;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.BackgroundModes = {
enabled = 1;
};
com.apple.DataProtection = {
enabled = 1;
};
com.apple.Push = {
enabled = 1;
};
};
};
5F387B3B1E9A77FA00308C34 = {
CreatedOnToolsVersion = 8.3.1;
DevelopmentTeam = 28CC8SCVUN;
ProvisioningStyle = Automatic;
TestTargetID = 5F387B271E9A77F900308C34;
};
5F387B461E9A77FA00308C34 = {
CreatedOnToolsVersion = 8.3.1;
DevelopmentTeam = 28CC8SCVUN;
ProvisioningStyle = Automatic;
TestTargetID = 5F387B271E9A77F900308C34;
};
};
};
buildConfigurationList = 5F387B231E9A77F900308C34 /* Build configuration list for PBXProject "My Mind" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 5F387B1F1E9A77F900308C34;
productRefGroup = 5F387B291E9A77F900308C34 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
5F387B271E9A77F900308C34 /* My Mind */,
5F387B3B1E9A77FA00308C34 /* My MindTests */,
5F387B461E9A77FA00308C34 /* My MindUITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
5F387B261E9A77F900308C34 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5F387B361E9A77F900308C34 /* LaunchScreen.storyboard in Resources */,
5FAC04911E9AD1F60034DF77 /* GoogleService-Info.plist in Resources */,
5F387B331E9A77F900308C34 /* Assets.xcassets in Resources */,
5F387B311E9A77F900308C34 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B3A1E9A77FA00308C34 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B451E9A77FA00308C34 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
0C96D1A6FC50BBF2F94C13C8 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My Mind/Pods-My Mind-resources.sh\"\n";
showEnvVarsInLog = 0;
};
1527ACBB4520742D6833DFDD /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
showEnvVarsInLog = 0;
};
247238A8EA84F82BF46D3FAE /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
showEnvVarsInLog = 0;
};
43471D3845F376B7B6A61722 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My Mind/Pods-My Mind-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9805D1E59AA2B694E996F40B /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My MindUITests/Pods-My MindUITests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9C78D3E78C9188955EBE7FE3 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My MindTests/Pods-My MindTests-resources.sh\"\n";
showEnvVarsInLog = 0;
};
B649BBA2ADA126A145C221ED /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My MindTests/Pods-My MindTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
BE15E72E75C38FE0DBC03AFB /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n";
showEnvVarsInLog = 0;
};
F00EC5C8C3737A67F05C83EC /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-My MindUITests/Pods-My MindUITests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
5F387B241E9A77F900308C34 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5F1D73F51E9AA390001ED9FC /* OnBoardingController.swift in Sources */,
5F387B2C1E9A77F900308C34 /* AppDelegate.swift in Sources */,
5FB7C4491E9D1CBC001F76FF /* FormViews.swift in Sources */,
5FAC04931E9AD2110034DF77 /* MainViews.swift in Sources */,
5F1D73F31E9AA390001ED9FC /* ForumView.swift in Sources */,
5F1D73F61E9AA390001ED9FC /* WelcomeScreenOne.swift in Sources */,
5F1D73F41E9AA390001ED9FC /* TabBarController.swift in Sources */,
5F1D73F11E9AA390001ED9FC /* UserViews.swift in Sources */,
5F1D73F81E9AA390001ED9FC /* WelcomeScreenThree.swift in Sources */,
5FAC04951E9ADF4B0034DF77 /* OnlineInterfaces.swift in Sources */,
5F1D73F71E9AA390001ED9FC /* WelcomeScreenTwo.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B381E9A77FA00308C34 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5F387B411E9A77FA00308C34 /* My_MindTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
5F387B431E9A77FA00308C34 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
5F387B4C1E9A77FA00308C34 /* My_MindUITests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
5F387B3E1E9A77FA00308C34 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5F387B271E9A77F900308C34 /* My Mind */;
targetProxy = 5F387B3D1E9A77FA00308C34 /* PBXContainerItemProxy */;
};
5F387B491E9A77FA00308C34 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 5F387B271E9A77F900308C34 /* My Mind */;
targetProxy = 5F387B481E9A77FA00308C34 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
5F387B2F1E9A77F900308C34 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
5F387B301E9A77F900308C34 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
5F387B341E9A77F900308C34 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
5F387B351E9A77F900308C34 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
5F387B4E1E9A77FA00308C34 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
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;
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
5F387B4F1E9A77FA00308C34 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
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;
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
5F387B511E9A77FA00308C34 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 03237502A99BD1B8640610FB /* Pods-My Mind.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "My Mind/My Mind.entitlements";
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My Mind/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/**";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-Mind";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Debug;
};
5F387B521E9A77FA00308C34 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 14A46FE3E7F911FF9F206D9F /* Pods-My Mind.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "My Mind/My Mind.entitlements";
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My Mind/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/**";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-Mind";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
};
name = Release;
};
5F387B541E9A77FA00308C34 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = ACB04384CBCB9A221EBE6FF4 /* Pods-My MindTests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My MindTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-MindTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/My Mind.app/My Mind";
};
name = Debug;
};
5F387B551E9A77FA00308C34 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 24CEC2F2536D3F042ACE49E8 /* Pods-My MindTests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_LOADER = "$(TEST_HOST)";
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My MindTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-MindTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/My Mind.app/My Mind";
};
name = Release;
};
5F387B571E9A77FA00308C34 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = ABF283DEA18DADABFE6E9651 /* Pods-My MindUITests.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My MindUITests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-MindUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_TARGET_NAME = "My Mind";
};
name = Debug;
};
5F387B581E9A77FA00308C34 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = E83680762934A4609FB47468 /* Pods-My MindUITests.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
DEVELOPMENT_TEAM = 28CC8SCVUN;
INFOPLIST_FILE = "My MindUITests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "ADCMNetworks.My-MindUITests";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 3.0;
TEST_TARGET_NAME = "My Mind";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
5F387B231E9A77F900308C34 /* Build configuration list for PBXProject "My Mind" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5F387B4E1E9A77FA00308C34 /* Debug */,
5F387B4F1E9A77FA00308C34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5F387B501E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My Mind" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5F387B511E9A77FA00308C34 /* Debug */,
5F387B521E9A77FA00308C34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5F387B531E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My MindTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5F387B541E9A77FA00308C34 /* Debug */,
5F387B551E9A77FA00308C34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
5F387B561E9A77FA00308C34 /* Build configuration list for PBXNativeTarget "My MindUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
5F387B571E9A77FA00308C34 /* Debug */,
5F387B581E9A77FA00308C34 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 5F387B201E9A77F900308C34 /* Project object */;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:My Mind.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0830"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B271E9A77F900308C34"
BuildableName = "My Mind.app"
BlueprintName = "My Mind"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B3B1E9A77FA00308C34"
BuildableName = "My MindTests.xctest"
BlueprintName = "My MindTests"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B461E9A77FA00308C34"
BuildableName = "My MindUITests.xctest"
BlueprintName = "My MindUITests"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B271E9A77F900308C34"
BuildableName = "My Mind.app"
BlueprintName = "My Mind"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B271E9A77F900308C34"
BuildableName = "My Mind.app"
BlueprintName = "My Mind"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "5F387B271E9A77F900308C34"
BuildableName = "My Mind.app"
BlueprintName = "My Mind"
ReferencedContainer = "container:My Mind.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,32 @@
<?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>SchemeUserState</key>
<dict>
<key>My Mind.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>5F387B271E9A77F900308C34</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>5F387B3B1E9A77FA00308C34</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>5F387B461E9A77FA00308C34</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:My Mind.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "0"
version = "2.0">
</Bucket>

View File

@@ -0,0 +1,162 @@
//
// AppDelegate.swift
// My Mind
//
// Created by Alexander Davis on 09/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import UIKit
import Firebase
import UserNotifications
import NotificationCenter
import FirebaseMessaging
import FirebaseDatabase
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
let gcmMessageIDKey = "gcm.message_id"
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Use Firebase library to configure APIs
FIRApp.configure()
FIRDatabase.database().persistenceEnabled = true
//If User Is Signed In Direct to Main App Section
let currentUser = FIRAuth.auth()?.currentUser
let mainStoryboard = UIStoryboard(name: "Main", bundle: nil)
if currentUser != nil
{
self.window?.rootViewController = mainStoryboard.instantiateViewController(withIdentifier: "MainController")
}
else
{
self.window?.rootViewController = mainStoryboard.instantiateViewController(withIdentifier: "OnBoard")
}
//Turn On Notifications for App
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
// For iOS 10 data message (sent via FCM)
FIRMessaging.messaging().remoteMessageDelegate = self as? FIRMessagingDelegate
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
completionHandler(UIBackgroundFetchResult.newData)
}
}
// [START ios_10_message_handling]
@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
completionHandler([])
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
completionHandler()
}
}
// [END ios_10_message_handling]
// [START ios_10_data_message_handling]
extension AppDelegate : FIRMessagingDelegate {
// Receive data message on iOS 10 devices while app is in the foreground.
func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
print(remoteMessage.appData)
}
}
// [END ios_10_data_message_handling]

View File

@@ -0,0 +1,152 @@
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "57x57",
"idiom" : "iphone",
"filename" : "Icon-App-57x57@1x.png",
"scale" : "1x"
},
{
"size" : "57x57",
"idiom" : "iphone",
"filename" : "Icon-App-57x57@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "50x50",
"idiom" : "ipad",
"filename" : "Icon-Small-50x50@1x.png",
"scale" : "1x"
},
{
"size" : "50x50",
"idiom" : "ipad",
"filename" : "Icon-Small-50x50@2x.png",
"scale" : "2x"
},
{
"size" : "72x72",
"idiom" : "ipad",
"filename" : "Icon-App-72x72@1x.png",
"scale" : "1x"
},
{
"size" : "72x72",
"idiom" : "ipad",
"filename" : "Icon-App-72x72@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Clock-50 (1).png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Back-50.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

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

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "graph150.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "graph300.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "graph450.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Engage50.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "Engage100.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "Engage150.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "engage30.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "engage60.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "engage90.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "button_folder.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "button_folder_open.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Brief-50 (1).png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "money150.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "money300.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "money450.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@@ -0,0 +1,21 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "Create New-50 (1).png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "first.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

View File

@@ -0,0 +1,23 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "iTunesArtwork@1x.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "iTunesArtwork@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "iTunesArtwork@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "second.pdf"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

Binary file not shown.

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12118" systemVersion="16E195" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="Crv-dd-76h">
<device id="retina5_5" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12086"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="qVH-iM-wwt">
<objects>
<viewController id="Crv-dd-76h" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="dyd-gr-cRd"/>
<viewControllerLayoutGuide type="bottom" id="clL-So-ApP"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="ujy-x6-zUj">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright © 2017 Alexander Davis." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="0cs-ae-w9Y">
<rect key="frame" x="20" y="626" width="336" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="iTunesArtwork" translatesAutoresizingMaskIntoConstraints="NO" id="rbW-5g-91F">
<rect key="frame" x="67" y="42" width="242" height="242"/>
<constraints>
<constraint firstAttribute="height" constant="242" id="iv1-sm-Dbh"/>
</constraints>
</imageView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="My Mind" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="8S1-e1-p48">
<rect key="frame" x="20" y="373" width="335" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="0.25098040700000002" green="0.0" blue="0.50196081400000003" alpha="1" colorSpace="calibratedRGB"/>
<constraints>
<constraint firstItem="8S1-e1-p48" firstAttribute="leading" secondItem="ujy-x6-zUj" secondAttribute="leadingMargin" constant="4" id="EO9-oO-Ai5"/>
<constraint firstAttribute="bottom" secondItem="0cs-ae-w9Y" secondAttribute="bottom" constant="20" symbolic="YES" id="GSE-l2-PER"/>
<constraint firstItem="rbW-5g-91F" firstAttribute="centerX" secondItem="ujy-x6-zUj" secondAttribute="centerX" id="PU0-r5-Y4q"/>
<constraint firstItem="rbW-5g-91F" firstAttribute="top" secondItem="dyd-gr-cRd" secondAttribute="bottom" constant="22" id="hbs-cy-llB"/>
<constraint firstItem="8S1-e1-p48" firstAttribute="centerX" secondItem="0cs-ae-w9Y" secondAttribute="centerX" id="iM0-9i-mhf"/>
<constraint firstItem="8S1-e1-p48" firstAttribute="leading" secondItem="0cs-ae-w9Y" secondAttribute="leading" id="snL-XS-J2M"/>
<constraint firstItem="8S1-e1-p48" firstAttribute="top" secondItem="rbW-5g-91F" secondAttribute="bottom" constant="89" id="taj-hb-aAT"/>
<constraint firstItem="rbW-5g-91F" firstAttribute="leading" secondItem="ujy-x6-zUj" secondAttribute="leadingMargin" constant="51" id="wvT-Yi-ZZg"/>
<constraint firstItem="rbW-5g-91F" firstAttribute="centerX" secondItem="8S1-e1-p48" secondAttribute="centerX" id="xwD-Cr-1AI"/>
</constraints>
</view>
<simulatedStatusBarMetrics key="simulatedStatusBarMetrics" statusBarStyle="lightContent"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<size key="freeformSize" width="375" height="667"/>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Ac4-Ci-SeS" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52" y="374.66266866566718"/>
</scene>
</scenes>
<resources>
<image name="iTunesArtwork" width="512" height="512"/>
</resources>
</document>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,466 @@
//
// FormViews.swift
// My Mind
//
// Created by Alexander Davis on 11/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
import SwiftForms
import MessageUI
import MapKit
class ReferralForm: FormViewController, MFMailComposeViewControllerDelegate{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
struct Static {
static let nameTag = "name"
static let passwordTag = "password"
static let lastNameTag = "lastName"
static let addressTag = "address"
static let IDTag = "idnumber"
static let GenderTag = "gender"
static let personalEmailTag = "personalemail"
static let uniEmailTag = "universityemail"
static let CourseTag = "course"
static let phoneTag = "phone"
static let Voicemail = "voicemail"
static let DSATag = "disabledstudent"
static let FacultyTag = "faculty"
static let birthday = "birthday"
static let PastSupportTag = "pastsupport"
static let CurrentSupportTag = "currentsupport"
static let subjectTag = "subject"
static let timescaleTag = "timescale"
static let button = "button"
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadForm()
}
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Submit", style: .plain, target: self, action: #selector(ReferralForm.submit(_:)))
}
// MARK: Actions
func submit() {
let data = self.form.formValues().description
let alertController = UIAlertController(title: "Form Completed", message: "This form has sucessfully been submitted", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in SendRef(input: data);self.tabBarController!.tabBar.items?[0].isEnabled = false;self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
// MARK: Private interface
fileprivate func loadForm() {
let form = FormDescriptor(title: "Referral Form")
let section1 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
var row = FormRowDescriptor(tag: Static.button, type: .button, title: "Send Form")
row.configuration.button.didSelectClosure = { _ in
self.view.endEditing(true)
self.submit()
}
section1.rows.append(row)
let section2 = FormSectionDescriptor(headerTitle: "About Yourself", footerTitle: nil)
row = FormRowDescriptor(tag: Static.nameTag, type: .name, title: "First Name")
row.configuration.cell.appearance = ["textField.placeholder" : "First Name" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.lastNameTag, type: .name, title: "Last Name")
row.configuration.cell.appearance = ["textField.placeholder" : "Last name" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.IDTag, type: .number, title: "Student ID")
row.configuration.cell.appearance = ["textField.placeholder" : "12345678" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.birthday, type: .date, title: "Date of Birth")
row.configuration.cell.showsInputToolbar = true
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.uniEmailTag, type: .email, title: "University Email")
row.configuration.cell.appearance = ["textField.placeholder" : "john.smith@mail.bcu.ac.uk" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.personalEmailTag, type: .email, title: "Alternative Email")
row.configuration.cell.appearance = ["textField.placeholder" : "john.smith@outlook.com" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.phoneTag, type: .phone, title: "Phone")
row.configuration.cell.appearance = ["textField.placeholder" : "Mobile Number" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.Voicemail, type: .booleanSwitch, title: "Can we leave a voicemail message?")
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.GenderTag, type: .picker, title: "Gender")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["F", "M", "O", "U"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "F":
return "Female"
case "M":
return "Male"
case "O":
return "Other"
case "U":
return "I'd rather not to say"
default:
return ""
}
}
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.addressTag, type: .multilineText, title: "Address")
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.DSATag, type: .booleanSwitch, title: "Are you a disabled student (eligible for DSA)?")
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.CourseTag, type: .text, title: "Course")
row.configuration.cell.appearance = ["textField.placeholder" : "BSc Computer Science (Hons)" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.FacultyTag, type: .picker, title: "Faculty")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["CEBE", "HELS", "ADM", "BLSS"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "CEBE":
return "Computing, Engineering and The Built Environment"
case "HELS":
return "Health, Education and Life Sciences"
case "ADM":
return "Arts, Design and Media"
case "BLSS":
return "Business, Law and Social Sciences"
default:
return ""
}
}
section2.rows.append(row)
let section3 = FormSectionDescriptor(headerTitle: "What you would like to talk about.", footerTitle: nil)
row = FormRowDescriptor(tag: Static.subjectTag, type: .multilineText, title: "")
section3.rows.append(row)
row = FormRowDescriptor(tag: Static.timescaleTag, type: .picker, title: "How long have you been concerned?")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["NL", "ST", "QL", "VL"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "NL":
return "Not Long (within 1 month)"
case "ST":
return "Some Time (1-3 months)"
case "QL":
return "Quite Some Time (3-6 months)"
case "VL":
return "A Long Time (6+ months)"
default:
return ""
}
}
section3.rows.append(row)
row = FormRowDescriptor(tag: Static.CurrentSupportTag, type: .multipleSelector, title: "Are you currently receiving support?")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["No", "CBT", "CPN", "CP", "GP", "MHWA", "Psyi", "Psyo", "SW", "O"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "No":
return "No"
case "CBT":
return "CBT Practitioner (e.g. Healthy Minds)"
case "CPN":
return "Community Psychiatric Nurse (CPN)"
case "CP":
return "Counsellor/Psychotherapist"
case "GP":
return "GP"
case "MHWA":
return "Mental Health/Wellbeing Adviser"
case "Psyi":
return "Psychiatrist"
case "Psyo":
return "Psychologist"
case "SW":
return "Social Worker"
case "O":
return "Other"
default:
return ""
}
}
section3.rows.append(row)
row = FormRowDescriptor(tag: Static.PastSupportTag, type: .multipleSelector, title: "Have you received support in the past?")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["No", "CBT", "CPN", "CP", "GP", "MHWA", "Psyi", "Psyo", "SW", "O"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "No":
return "No"
case "CBT":
return "CBT Practitioner (e.g. Healthy Minds)"
case "CPN":
return "Community Psychiatric Nurse (CPN)"
case "CP":
return "Counsellor/Psychotherapist"
case "GP":
return "GP"
case "MHWA":
return "Mental Health/Wellbeing Adviser"
case "Psyi":
return "Psychiatrist"
case "Psyo":
return "Psychologist"
case "SW":
return "Social Worker"
case "O":
return "Other"
default:
return ""
}
}
section3.rows.append(row)
form.sections = [section1, section2, section3]
self.form = form
}
}
class ReqAppoint: FormViewController, MFMailComposeViewControllerDelegate{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
struct Static {
static let date = "date"
static let time = "time"
static let location = "location"
static let phoneTag = "phone"
static let adivsor = "advisor"
static let reason = "reason"
static let button = "button"
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.loadForm()
}
override func viewDidLoad() {
super.viewDidLoad()
//self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Submit", style: .plain, target: self, action: #selector(ReferralForm.submit(_:)))
}
// MARK: Actions
func submit() {
let data = self.form.formValues().description
let alertController = UIAlertController(title: "Request Sent", message: "Your Request Has Been Sent", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in SendRef(input: data);self.tabBarController!.tabBar.items?[0].isEnabled = false;self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
// MARK: Private interface
fileprivate func loadForm() {
let form = FormDescriptor(title: "Referral Form")
let section1 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
var row = FormRowDescriptor(tag: Static.button, type: .button, title: "Send Form")
row.configuration.button.didSelectClosure = { _ in
self.view.endEditing(true)
self.submit()
}
section1.rows.append(row)
let section2 = FormSectionDescriptor(headerTitle: nil, footerTitle: nil)
row = FormRowDescriptor(tag: Static.date, type: .date, title: "Date Requested")
row.configuration.cell.showsInputToolbar = true
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.time, type: .time, title: "Time Requested")
row.configuration.cell.showsInputToolbar = true
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.location, type: .picker, title: "Location")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["Centre", "North", "South", "Cons", "Margaret", "Jew","Bour"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "Centre":
return "City Centre (Curzon Building)"
case "North":
return "City North (Baker Building)"
case "South":
return "City South (Seacole Building)"
case "Cons":
return "The Birmingham Conservatoire"
case "Margaret":
return "Margaret Street"
case "Jew":
return "Victoria Street"
case "Bour":
return "Bournville Campus"
default:
return ""
}
}
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.phoneTag, type: .phone, title: "Phone")
row.configuration.cell.appearance = ["textField.placeholder" : "Mobile Number" as AnyObject, "textField.textAlignment" : NSTextAlignment.right.rawValue as AnyObject]
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.adivsor, type: .picker, title: "Preferred Advisor")
row.configuration.cell.showsInputToolbar = true
row.configuration.selection.options = (["JS", "AD", "TM", "U"] as [String]) as [AnyObject]
row.configuration.selection.optionTitleClosure = { value in
guard let option = value as? String else { return "" }
switch option {
case "JS":
return "John Smith"
case "AD":
return "Alexander Davis"
case "TM":
return "Tim Minchin"
case "U":
return "I Don't Mind"
default:
return ""
}
}
section2.rows.append(row)
row = FormRowDescriptor(tag: Static.reason, type: .multilineText, title: "Reason for Appointment")
section2.rows.append(row)
form.sections = [section1, section2]
self.form = form
}
}
class ConfAppoint: UIViewController{
@IBOutlet var ConfirmMap: MKMapView!
override func viewDidLoad() {
let initalLocation = CLLocation(latitude: 52.483358, longitude: -1.883024)
centerMapOnLocation(location: initalLocation)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
let regionRadius: CLLocationDistance = 1000
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
regionRadius * 2.0, regionRadius * 2.0)
ConfirmMap.setRegion(coordinateRegion, animated: true)
}
@IBAction func Confirm(_ sender: UIButton) {
let alertController = UIAlertController(title: "Appointment Confirmed", message: "Your appointment has been confirmed.", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
@IBAction func RequestAptbtn(_ sender: UIButton) {
let alertController = UIAlertController(title: "New Request Made", message: "A new appointment request has been made for you.", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
class UpcomingAppoint: UIViewController{
@IBOutlet var UpcomingMap: MKMapView!
override func viewDidLoad() {
let initalLocation = CLLocation(latitude: 52.483358, longitude: -1.883024)
centerMapOnLocation(location: initalLocation)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
let regionRadius: CLLocationDistance = 1000
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
regionRadius * 2.0, regionRadius * 2.0)
UpcomingMap.setRegion(coordinateRegion, animated: true)
}
@IBAction func Cancelbtn(_ sender: UIButton) {
let alertController = UIAlertController(title: "Appointment Cancelled", message: "Your appointment has been cancelled.", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
class PastAppoint: UIViewController{
override func viewDidLoad() {
let initalLocation = CLLocation(latitude: 52.483358, longitude: -1.883024)
centerMapOnLocation(location: initalLocation)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
@IBOutlet var PastMap: MKMapView!
let regionRadius: CLLocationDistance = 1000
func centerMapOnLocation(location: CLLocation) {
let coordinateRegion = MKCoordinateRegionMakeWithDistance(location.coordinate,
regionRadius * 2.0, regionRadius * 2.0)
PastMap.setRegion(coordinateRegion, animated: true)
}
}

View File

@@ -0,0 +1,58 @@
//
// ForumView.swift
// My Mind
//
// Created by Alexander Davis on 31/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class ForumViewController: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
@IBOutlet var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = URL (string: "https://www.mymindforum.com");
let requestObj = URLRequest(url: url!);
webView.loadRequest(requestObj);
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
class ForumSignUpViewController: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
@IBOutlet weak var ForumSignUp: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let url = URL (string: "https://www.mymindforum.com/ucp.php?mode=register");
let requestObj = URLRequest(url: url!);
ForumSignUp.loadRequest(requestObj);
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}

View File

@@ -0,0 +1,40 @@
<?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>AD_UNIT_ID_FOR_BANNER_TEST</key>
<string>ca-app-pub-3940256099942544/2934735716</string>
<key>AD_UNIT_ID_FOR_INTERSTITIAL_TEST</key>
<string>ca-app-pub-3940256099942544/4411468910</string>
<key>CLIENT_ID</key>
<string>324489592582-m87c61qlrroki9t4iuv8kuh7r0il684a.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.324489592582-m87c61qlrroki9t4iuv8kuh7r0il684a</string>
<key>API_KEY</key>
<string>AIzaSyA22IY1X_-LBclpYnMIKSjgBpzqF3DvnBc</string>
<key>GCM_SENDER_ID</key>
<string>324489592582</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>ADCMNetworks.My-Mind</string>
<key>PROJECT_ID</key>
<string>mymind-9b3b3</string>
<key>STORAGE_BUCKET</key>
<string>mymind-9b3b3.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<true/>
<key>IS_ANALYTICS_ENABLED</key>
<false/>
<key>IS_APPINVITE_ENABLED</key>
<false/>
<key>IS_GCM_ENABLED</key>
<true/>
<key>IS_SIGNIN_ENABLED</key>
<true/>
<key>GOOGLE_APP_ID</key>
<string>1:324489592582:ios:3612a095e492fb09</string>
<key>DATABASE_URL</key>
<string>https://mymind-9b3b3.firebaseio.com</string>
</dict>
</plist>

View File

@@ -0,0 +1,45 @@
<?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>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>location</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,80 @@
//
// MainViews.swift
// My Mind
//
// Created by Alexander Davis on 09/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
import Firebase
import FirebaseDatabase
class Referrals: UIViewController{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class ReferralConf: UIViewController{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class Appoint: UIViewController{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class Contact: UIViewController{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class EmergeContacts: UITableViewController{
@IBAction func TrustCallBtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://01213010000")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
@IBAction func FwdThinkingbtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://03003000099")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
@IBAction func Samaritansbtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://08457909090")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
@IBAction func Sanebtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://08457678000")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
@IBAction func Mindbtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://0300123393")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
@IBAction func Alexsbtn(_ sender: UIButton) {
if let url = URL(string: "telprompt://07871778000")
{
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
}

View File

@@ -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>aps-environment</key>
<string>development</string>
<key>com.apple.developer.default-data-protection</key>
<string>NSFileProtectionComplete</string>
</dict>
</plist>

View File

@@ -0,0 +1,83 @@
//
// OnBoardingController.swift
// My Mind
//
// Created by Alexander Davis on 30/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class OnBoardingController : UIPageViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override func viewDidLoad() {
// Set the dataSource and delegate in code.
// I can't figure out how to do this in the Storyboard!
dataSource = self
delegate = self
// This is the starting point. Start with step zero.
setViewControllers([getPageOne()], direction: .forward, animated: false, completion: nil)
}
func getPageOne() -> PageOne {
return storyboard!.instantiateViewController(withIdentifier: "WelcomeScreenOne") as! PageOne
}
func getPageTwo() -> PageTwo {
return storyboard!.instantiateViewController(withIdentifier: "WelcomeScreenTwo") as! PageTwo
}
func getPageThree() -> PageThree {
return storyboard!.instantiateViewController(withIdentifier: "WelcomeScreenThree") as! PageThree
}
}
// MARK: - UIPageViewControllerDataSource methods
extension OnBoardingController : UIPageViewControllerDataSource {
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
if viewController.isKind(of: PageTwo.self) {
// 2 -> 1
return getPageTwo()
} else if viewController.isKind(of: PageTwo.self) {
// 1 -> 0
return getPageOne()
} else {
// 0 -> end of the road
return nil
}
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
if viewController.isKind(of: PageOne.self) {
// 0 -> 1
return getPageTwo()
} else if viewController.isKind(of: PageTwo.self) {
// 1 -> 2
return getPageThree()
} else {
// 2 -> end of the road
return nil
}
}
// This only gets called once, when setViewControllers is called
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
return 0
}
}
// MARK: - UIPageViewControllerDelegate methods
extension OnBoardingController : UIPageViewControllerDelegate {
}

View File

@@ -0,0 +1,32 @@
//
// Databases.swift
// My Mind
//
// Created by Alexander Davis on 09/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
func SendRef(input: String){
var request = URLRequest(url: URL(string: "https://www.mymindadmin.com/ReferMe.php")!)
request.httpMethod = "GET"
let postString = input
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print("error=\(String(describing: error))")
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print("response = \(String(describing: response))")
}
let responseString = String(data: data, encoding: .utf8)
print("responseString = \(String(describing: responseString))")
}
task.resume() }

View File

@@ -0,0 +1,16 @@
//
// TabBarController.swift
// My Mind
//
// Created by Alexander Davis on 05/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class MainTabView: UITabBarController{
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

View File

@@ -0,0 +1,168 @@
//
// LoginView.swift
// My Mind
//
// Created by Alexander Davis on 31/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
import Firebase
import FirebaseAuth
class LoginView: UIViewController {
@IBOutlet weak var Emailtbx: UITextField!
@IBOutlet weak var Passwordtbx: UITextField!
@IBAction func Loginbtn(_ sender: UIButton) {
if self.Emailtbx.text == "" || self.Passwordtbx.text == "" {
//Alert to tell the user that there was an error because they didn't fill anything in the textfields because they didn't fill anything in
let alertController = UIAlertController(title: "Error", message: "Please enter an email and password.", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
} else {
FIRAuth.auth()?.signIn(withEmail: self.Emailtbx.text!, password: self.Passwordtbx.text!) { (user, error) in
if error == nil {
//Print into the console if successfully logged in
print("You have successfully logged in")
//Go to the MainController if the login is sucessful
let alertController = UIAlertController(title: "Welcome", message: "You have successfully logged in", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "MainController")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
} else {
//Tells the user that there is an error and then gets firebase to tell them the error
let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class SignUp : UIViewController {
@IBOutlet weak var Emailtbx: UITextField!
@IBOutlet weak var Passwordtbx: UITextField!
@IBAction func createAccountbtn(_ sender: UIButton) {
if Emailtbx.text == "" {
let alertController = UIAlertController(title: "Error", message: "Please enter your email and password", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(defaultAction)
present(alertController, animated: true, completion: nil)
} else {
FIRAuth.auth()?.createUser(withEmail: Emailtbx.text!, password: Passwordtbx.text!) { (user, error) in
if error == nil {
let alertController = UIAlertController(title: "Sign Up Complete", message: "You have Successfully Signed Up", preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "Login")
let defaultAction = UIAlertAction(title: "OK", style: .default, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
} else {
let alertController = UIAlertController(title: "Error", message: error?.localizedDescription, preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
}
}
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class ForgotPass : UIViewController {
@IBOutlet weak var Emailtbx: UITextField!
@IBAction func Resetbtn(_ sender: UIButton) {
if self.Emailtbx.text == "" {
let alertController = UIAlertController(title: "Oops!", message: "Please enter an email.", preferredStyle: .alert)
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: nil)
alertController.addAction(defaultAction)
present(alertController, animated: true, completion: nil)
} else {
FIRAuth.auth()?.sendPasswordReset(withEmail: self.Emailtbx.text!, completion: { (error) in
var title = ""
var message = ""
if error != nil {
title = "Error!"
message = (error?.localizedDescription)!
} else {
title = "Success!"
message = "Password reset email sent."
self.Emailtbx.text = ""
}
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let vc = self.storyboard?.instantiateViewController(withIdentifier: "Login")
let defaultAction = UIAlertAction(title: "OK", style: .cancel, handler: { action in self.present(vc!, animated: true, completion: nil);})
alertController.addAction(defaultAction)
self.present(alertController, animated: true, completion: nil)
})
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
class Logout : UIViewController {
@IBAction func Logoutbtn(_ sender: UIButton) {
if FIRAuth.auth()?.currentUser != nil {
do {
try FIRAuth.auth()?.signOut()
let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "OnBoard")
present(vc, animated: true, completion: nil)
} catch let error as NSError {
print(error.localizedDescription)
}
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

View File

@@ -0,0 +1,18 @@
//
// WelcomeScreenOne.swift
// My Mind
//
// Created by Alexander Davis on 30/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class PageOne : UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

View File

@@ -0,0 +1,18 @@
//
// WelcomeScreenThree.swift
// My Mind
//
// Created by Alexander Davis on 30/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class PageThree : UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

View File

@@ -0,0 +1,18 @@
//
// WelcomeScreenTwo.swift
// My Mind
//
// Created by Alexander Davis on 30/03/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import Foundation
import UIKit
class PageTwo : UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}

View File

@@ -0,0 +1,22 @@
<?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</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@@ -0,0 +1,36 @@
//
// My_MindTests.swift
// My MindTests
//
// Created by Alexander Davis on 09/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import XCTest
@testable import My_Mind
class My_MindTests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
func testPerformanceExample() {
// This is an example of a performance test case.
self.measure {
// Put the code you want to measure the time of here.
}
}
}

View File

@@ -0,0 +1,22 @@
<?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</string>
<key>CFBundleVersion</key>
<string>1</string>
</dict>
</plist>

View File

@@ -0,0 +1,36 @@
//
// My_MindUITests.swift
// My MindUITests
//
// Created by Alexander Davis on 09/04/2017.
// Copyright © 2017 Alexander Davis. All rights reserved.
//
import XCTest
class My_MindUITests: XCTestCase {
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
XCUIApplication().launch()
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDown() {
// Put teardown code here. This method is called after the invocation of each test method in the class.
super.tearDown()
}
func testExample() {
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
}

27
Old My Mind/Podfile Normal file
View File

@@ -0,0 +1,27 @@
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'My Mind' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
# Pods for My Mind
target 'My MindTests' do
inherit! :search_paths
# Pods for testing
end
target 'My MindUITests' do
inherit! :search_paths
# Pods for testing
end
pod 'Firebase/Core'
pod 'Firebase/Auth'
pod 'Firebase/Messaging'
pod 'Firebase/Database'
pod 'Firebase/Storage'
pod 'SwiftForms'
end

78
Old My Mind/Podfile.lock Normal file
View File

@@ -0,0 +1,78 @@
PODS:
- Firebase/Auth (3.15.0):
- Firebase/Core
- FirebaseAuth (= 3.1.1)
- Firebase/Core (3.15.0):
- FirebaseAnalytics (= 3.7.0)
- FirebaseCore (= 3.5.2)
- Firebase/Database (3.15.0):
- Firebase/Core
- FirebaseDatabase (= 3.1.2)
- Firebase/Messaging (3.15.0):
- Firebase/Core
- FirebaseMessaging (= 1.2.2)
- Firebase/Storage (3.15.0):
- Firebase/Core
- FirebaseStorage (= 1.1.0)
- FirebaseAnalytics (3.7.0):
- FirebaseCore (~> 3.5)
- FirebaseInstanceID (~> 1.0)
- GoogleToolboxForMac/NSData+zlib (~> 2.1)
- FirebaseAuth (3.1.1):
- FirebaseAnalytics (~> 3.7)
- GoogleToolboxForMac/NSDictionary+URLArguments (~> 2.1)
- GTMSessionFetcher/Core (~> 1.1)
- FirebaseCore (3.5.2):
- GoogleToolboxForMac/NSData+zlib (~> 2.1)
- FirebaseDatabase (3.1.2):
- FirebaseAnalytics (~> 3.7)
- FirebaseInstanceID (1.0.9)
- FirebaseMessaging (1.2.2):
- FirebaseAnalytics (~> 3.7)
- FirebaseInstanceID (~> 1.0)
- GoogleToolboxForMac/Logger (~> 2.1)
- Protobuf (~> 3.1)
- FirebaseStorage (1.1.0):
- FirebaseAnalytics (~> 3.7)
- GTMSessionFetcher/Core (~> 1.1)
- GoogleToolboxForMac/DebugUtils (2.1.1):
- GoogleToolboxForMac/Defines (= 2.1.1)
- GoogleToolboxForMac/Defines (2.1.1)
- GoogleToolboxForMac/Logger (2.1.1):
- GoogleToolboxForMac/Defines (= 2.1.1)
- GoogleToolboxForMac/NSData+zlib (2.1.1):
- GoogleToolboxForMac/Defines (= 2.1.1)
- GoogleToolboxForMac/NSDictionary+URLArguments (2.1.1):
- GoogleToolboxForMac/DebugUtils (= 2.1.1)
- GoogleToolboxForMac/Defines (= 2.1.1)
- GoogleToolboxForMac/NSString+URLArguments (= 2.1.1)
- GoogleToolboxForMac/NSString+URLArguments (2.1.1)
- GTMSessionFetcher/Core (1.1.9)
- Protobuf (3.2.0)
- SwiftForms (1.7)
DEPENDENCIES:
- Firebase/Auth
- Firebase/Core
- Firebase/Database
- Firebase/Messaging
- Firebase/Storage
- SwiftForms
SPEC CHECKSUMS:
Firebase: 2b1cdfba1cda8589f32904a697cc753322bff9d8
FirebaseAnalytics: 0d1b7d81d5021155be37702a94ba1ec16d45365d
FirebaseAuth: cc8a1824170adbd351edb7f994490a3fb5c18be6
FirebaseCore: a024587e43778508700af8c6b1209f7c4516ba02
FirebaseDatabase: 05c96d7b43a7368dc91c07791adb49683e1738d1
FirebaseInstanceID: 2d0518b1378fe9d685ef40cbdd63d2fdc1125339
FirebaseMessaging: df8267f378580a24174ce7861233aa11d5c90109
FirebaseStorage: a5c55b23741a49a72af8f30f95b3bb5ddbeda12d
GoogleToolboxForMac: 8e329f1b599f2512c6b10676d45736bcc2cbbeb0
GTMSessionFetcher: 5c046c76a1f859bc9c187e918f18e4fc7bb57b5e
Protobuf: 745f59e122e5de98d4d7ef291e264a0eef80f58e
SwiftForms: 3f3dbaa79fe54eb1ccd0aca8d0cd1e38eb00537e
PODFILE CHECKSUM: dd1734d567f280edf21443a33ce1b6333374b6d2
COCOAPODS: 1.2.1

38
Old My Mind/Pods/FirebaseAuth/CHANGELOG.md generated Executable file
View File

@@ -0,0 +1,38 @@
# 2017-02-06 -- v3.1.1
- Allows handling of additional errors when sending OOB action emails. The
server can respond with the following new error messages:
INVALID_MESSAGE_PAYLOAD,INVALID_SENDER and INVALID_RECIPIENT_EMAIL.
- Removes incorrect reference to FIRAuthErrorCodeCredentialTooOld in FIRUser.h.
- Provides additional error information from server if available.
# 2016-12-13 -- v3.1.0
- Adds FIRAuth methods that enable the app to follow up with user actions
delivered by email, such as verifying email address or reset password.
- No longer applies the keychain workaround introduced in v3.0.5 on iOS 10.2
simulator or above since the issue has been fixed.
- Fixes nullability compilation warnings when used in Swift.
- Better reports missing password error.
# 2016-10-24 -- v3.0.6
- Switches to depend on open sourced GoogleToolboxForMac and GTMSessionFetcher.
- Improves logging of keychain error when initializing.
# 2016-09-14 -- v3.0.5
- Works around a keychain issue in iOS 10 simulator.
- Reports the correct error for invalid email when signing in with email and
password.
# 2016-07-18 -- v3.0.4
- Fixes a race condition bug that could crash the app with an exception from
NSURLSession on iOS 9.
# 2016-06-20 -- v3.0.3
- Adds documentation for all possible errors returned by each method.
- Improves error handling and messages for a variety of error conditions.
- Whether or not an user is considered anonymous is now consistent with other
platforms.
- A saved signed in user is now siloed between different Firebase projects
within the same app.
# 2016-05-18 -- v3.0.2
- Initial public release.

View File

@@ -0,0 +1,488 @@
/** @file FIRAuth.h
@brief Firebase Auth SDK
@copyright Copyright 2015 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
#import <Foundation/Foundation.h>
#import "FIRAuthErrors.h"
@class FIRApp;
@class FIRAuth;
@class FIRAuthCredential;
@class FIRUser;
@protocol FIRAuthStateListener;
NS_ASSUME_NONNULL_BEGIN
/** @typedef FIRAuthStateDidChangeListenerHandle
@brief The type of handle returned by @c FIRAuth.addAuthStateDidChangeListener:.
*/
typedef id<NSObject> FIRAuthStateDidChangeListenerHandle;
/** @typedef FIRAuthStateDidChangeListenerBlock
@brief The type of block which can be registered as a listener for auth state did change events.
@param auth The FIRAuth object on which state changes occurred.
@param user Optionally; the current signed in user, if any.
*/
typedef void(^FIRAuthStateDidChangeListenerBlock)(FIRAuth *auth, FIRUser *_Nullable user);
/**
@brief The name of the @c NSNotificationCenter notification which is posted when the auth state
changes (for example, a new token has been produced, a user signs in or signs out). The
object parameter of the notification is the sender @c FIRAuth instance.
*/
extern NSString *const FIRAuthStateDidChangeNotification;
/** @typedef FIRAuthResultCallback
@brief The type of block invoked when sign-in related events complete.
@param user Optionally; the signed in user, if any.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRAuthResultCallback)(FIRUser *_Nullable user, NSError *_Nullable error);
/** @typedef FIRProviderQueryCallback
@brief The type of block invoked when a list of identity providers for a given email address is
requested.
@param providers Optionally; a list of provider identifiers, if any.
@see FIRGoogleAuthProviderID etc.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRProviderQueryCallback)(NSArray<NSString *> *_Nullable providers,
NSError *_Nullable error);
/** @typedef FIRSendPasswordResetCallback
@brief The type of block invoked when sending a password reset email.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRSendPasswordResetCallback)(NSError *_Nullable error);
/** @typedef FIRConfirmPasswordResetCallback
@brief The type of block invoked when performing a password reset.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRConfirmPasswordResetCallback)(NSError *_Nullable error);
/** @typedef FIRVerifyPasswordResetCodeCallback
@brief The type of block invoked when verifying that an out of band code should be used to
perform password reset.
@param email Optionally; the email address of the user for which the out of band code applies.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRVerifyPasswordResetCodeCallback)(NSString *_Nullable email,
NSError *_Nullable error);
/** @typedef FIRApplyActionCodeCallback
@brief The type of block invoked when applying an action code.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRApplyActionCodeCallback)(NSError *_Nullable error);
/**
@brief Keys used to retrieve operation data from a @c FIRActionCodeInfo object by the @c
dataForKey method.
*/
typedef NS_ENUM(NSInteger, FIRActionDataKey) {
/**
* The email address to which the code was sent.
* For FIRActionCodeOperationRecoverEmail, the new email address for the account.
*/
FIRActionCodeEmailKey = 0,
/** For FIRActionCodeOperationRecoverEmail, the current email address for the account. */
FIRActionCodeFromEmailKey = 1
};
/** @class FIRActionCodeInfo
@brief Manages information regarding action codes.
*/
@interface FIRActionCodeInfo : NSObject
/**
@brief Operations which can be performed with action codes.
*/
typedef NS_ENUM(NSInteger, FIRActionCodeOperation) {
/** Action code for unknown operation. */
FIRActionCodeOperationUnknown = 0,
/** Action code for password reset operation. */
FIRActionCodeOperationPasswordReset = 1,
/** Action code for verify email operation. */
FIRActionCodeOperationVerifyEmail = 2
};
/**
@brief The operation being performed.
*/
@property(nonatomic, readonly) FIRActionCodeOperation operation;
/** @fn dataForKey:
@brief The operation being performed.
@param key The FIRActionDataKey value used to retrieve the operation data.
@return The operation data pertaining to the provided action code key.
*/
- (NSString *)dataForKey:(FIRActionDataKey)key;
/** @fn init
@brief please use initWithOperation: instead.
*/
- (instancetype)init NS_UNAVAILABLE;
@end
/** @typedef FIRCheckActionCodeCallBack
@brief The type of block invoked when performing a check action code operation.
@param info Metadata corresponding to the action code.
@param error Optionally; if an error occurs, this is the NSError object that describes the
problem. Set to nil otherwise.
*/
typedef void (^FIRCheckActionCodeCallBack)(FIRActionCodeInfo *_Nullable info,
NSError *_Nullable error);
/** @class FIRAuth
@brief Manages authentication for Firebase apps.
@remarks This class is thread-safe.
*/
@interface FIRAuth : NSObject
/** @fn auth
@brief Gets the auth object for the default Firebase app.
@remarks Thread safe.
*/
+ (nullable FIRAuth *)auth NS_SWIFT_NAME(auth());
/** @fn authWithApp:
@brief Gets the auth object for a @c FIRApp.
@param app The FIRApp for which to retrieve the associated FIRAuth instance.
@return The FIRAuth instance associated with the given FIRApp.
*/
+ (nullable FIRAuth *)authWithApp:(FIRApp *)app;
/** @property app
@brief Gets the @c FIRApp object that this auth object is connected to.
*/
@property(nonatomic, weak, readonly, nullable) FIRApp *app;
/** @property currentUser
@brief Synchronously gets the cached current user, or null if there is none.
*/
@property(nonatomic, strong, readonly, nullable) FIRUser *currentUser;
/** @fn init
@brief Please access auth instances using @c FIRAuth.auth and @c FIRAuth.authForApp:.
*/
- (instancetype)init NS_UNAVAILABLE;
/** @fn fetchProvidersForEmail:completion:
@brief Fetches the list of IdPs that can be used for signing in with the provided email address.
Useful for an "identifier-first" sign-in flow.
@param email The email address for which to obtain a list of identity providers.
@param completion Optionally; a block which is invoked when the list of providers for the
specified email address is ready or an error was encountered. Invoked asynchronously on the
main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeInvalidEmail - Indicates the email address is malformed.</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)fetchProvidersForEmail:(NSString *)email
completion:(nullable FIRProviderQueryCallback)completion;
/** @fn signInWithEmail:password:completion:
@brief Signs in using an email address and password.
@param email The user's email address.
@param password The user's password.
@param completion Optionally; a block which is invoked when the sign in flow finishes, or is
canceled. Invoked asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that email and password
accounts are not enabled. Enable them in the Auth section of the
Firebase console.
</li>
<li>@c FIRAuthErrorCodeUserDisabled - Indicates the user's account is disabled.
</li>
<li>@c FIRAuthErrorCodeWrongPassword - Indicates the user attempted
sign in with an incorrect password.
</li>
<li>@c FIRAuthErrorCodeInvalidEmail - Indicates the email address is malformed.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)signInWithEmail:(NSString *)email
password:(NSString *)password
completion:(nullable FIRAuthResultCallback)completion;
/** @fn signInWithCredential:completion:
@brief Asynchronously signs in to Firebase with the given 3rd-party credentials (e.g. a Facebook
login Access Token, a Google ID Token/Access Token pair, etc.)
@param credential The credential supplied by the IdP.
@param completion Optionally; a block which is invoked when the sign in flow finishes, or is
canceled. Invoked asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeInvalidCredential - Indicates the supplied credential is invalid.
This could happen if it has expired or it is malformed.
</li>
<li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that accounts
with the identity provider represented by the credential are not enabled.
Enable them in the Auth section of the Firebase console.
</li>
<li>@c FIRAuthErrorCodeEmailAlreadyInUse - Indicates the email asserted by the credential
(e.g. the email in a Facebook access token) is already in use by an existing account,
that cannot be authenticated with this sign-in method. Call fetchProvidersForEmail for
this users email and then prompt them to sign in with any of the sign-in providers
returned. This error will only be thrown if the "One account per email address"
setting is enabled in the Firebase console, under Auth settings. Please note that the
error code raised in this specific situation may not be the same on
Web and Android.
</li>
<li>@c FIRAuthErrorCodeUserDisabled - Indicates the user's account is disabled.
</li>
<li>@c FIRAuthErrorCodeWrongPassword - Indicates the user attempted sign in with an
incorrect password, if credential is of the type EmailPasswordAuthCredential.
</li>
<li>@c FIRAuthErrorCodeInvalidEmail - Indicates the email address is malformed.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)signInWithCredential:(FIRAuthCredential *)credential
completion:(nullable FIRAuthResultCallback)completion;
/** @fn signInAnonymouslyWithCompletion:
@brief Asynchronously creates and becomes an anonymous user.
@param completion Optionally; a block which is invoked when the sign in finishes, or is
canceled. Invoked asynchronously on the main thread in the future.
@remarks If there is already an anonymous user signed in, that user will be returned instead.
If there is any other existing user signed in, that user will be signed out.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that anonymous accounts are
not enabled. Enable them in the Auth section of the Firebase console.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)signInAnonymouslyWithCompletion:(nullable FIRAuthResultCallback)completion;
/** @fn signInWithCustomToken:completion:
@brief Asynchronously signs in to Firebase with the given Auth token.
@param token A self-signed custom auth token.
@param completion Optionally; a block which is invoked when the sign in finishes, or is
canceled. Invoked asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeInvalidCustomToken - Indicates a validation error with
the custom token.
</li>
<li>@c FIRAuthErrorCodeCustomTokenMismatch - Indicates the service account and the API key
belong to different projects.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)signInWithCustomToken:(NSString *)token
completion:(nullable FIRAuthResultCallback)completion;
/** @fn createUserWithEmail:password:completion:
@brief Creates and, on success, signs in a user with the given email address and password.
@param email The user's email address.
@param password The user's desired password.
@param completion Optionally; a block which is invoked when the sign up flow finishes, or is
canceled. Invoked asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeInvalidEmail - Indicates the email address is malformed.
</li>
<li>@c FIRAuthErrorCodeEmailAlreadyInUse - Indicates the email used to attempt sign up
already exists. Call fetchProvidersForEmail to check which sign-in mechanisms the user
used, and prompt the user to sign in with one of those.
</li>
<li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates that email and password accounts
are not enabled. Enable them in the Auth section of the Firebase console.
</li>
<li>@c FIRAuthErrorCodeWeakPassword - Indicates an attempt to set a password that is
considered too weak. The NSLocalizedFailureReasonErrorKey field in the NSError.userInfo
dictionary object will contain more detailed explanation that can be shown to the user.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)createUserWithEmail:(NSString *)email
password:(NSString *)password
completion:(nullable FIRAuthResultCallback)completion;
/** @fn confirmPasswordResetWithCode:newPassword:completion:
@brief Resets the password given a code sent to the user outside of the app and a new password
for the user.
@param newPassword The new password.
@param completion Optionally; a block which is invoked when the request finishes. Invoked
asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeWeakPassword - Indicates an attempt to set a password that is
considered too weak.
</li>
<li>@c FIRAuthErrorCodeOperationNotAllowed - Indicates the administrator disabled sign
in with the specified identity provider.
</li>
<li>@c FIRAuthErrorCodeExpiredActionCode - Indicates the OOB code is expired.
</li>
<li>@c FIRAuthErrorCodeInvalidActionCode - Indicates the OOB code is invalid.
</li>
</ul>
@remarks See @c FIRAuthErrors for a list of error codes that are common to all API methods.
*/
- (void)confirmPasswordResetWithCode:(NSString *)code
newPassword:(NSString *)newPassword
completion:(FIRConfirmPasswordResetCallback)completion;
/** @fn checkActionCode:completion:
@brief Checks the validity of an out of band code.
@param code The out of band code to check validity.
@param completion Optionally; a block which is invoked when the request finishes. Invoked
asynchronously on the main thread in the future.
*/
- (void)checkActionCode:(NSString *)code completion:(FIRCheckActionCodeCallBack)completion;
/** @fn verifyPasswordResetCode:completion:
@brief Checks the validity of a verify password reset code.
@param code The password reset code to be verified.
@param completion Optionally; a block which is invoked when the request finishes. Invoked
asynchronously on the main thread in the future.
*/
- (void)verifyPasswordResetCode:(NSString *)code
completion:(FIRVerifyPasswordResetCodeCallback)completion;
/** @fn applyActionCode:completion:
@brief Applies out of band code.
@param code The out of band code to be applied.
@param completion Optionally; a block which is invoked when the request finishes. Invoked
asynchronously on the main thread in the future.
@remarks This method will not work for out of band codes which require an additional parameter,
such as password reset code.
*/
- (void)applyActionCode:(NSString *)code
completion:(FIRApplyActionCodeCallback)completion;
/** @fn sendPasswordResetWithEmail:completion:
@brief Initiates a password reset for the given email address.
@param email The email address of the user.
@param completion Optionally; a block which is invoked when the request finishes. Invoked
asynchronously on the main thread in the future.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeInvalidRecipientEmail - Indicates an invalid recipient email was
sent in the request.
</li>
<li>@c FIRAuthErrorCodeInvalidSender - Indicates an invalid sender email is set in
the console for this action.
</li>
<li>@c FIRAuthErrorCodeInvalidMessagePayload - Indicates an invalid email template for
sending update email.
</li>
</ul>
*/
- (void)sendPasswordResetWithEmail:(NSString *)email
completion:(nullable FIRSendPasswordResetCallback)completion;
/** @fn signOut:
@brief Signs out the current user.
@param error Optionally; if an error occurs, upon return contains an NSError object that
describes the problem; is nil otherwise.
@return @YES when the sign out request was successful. @NO otherwise.
@remarks Possible error codes:
<ul>
<li>@c FIRAuthErrorCodeKeychainError - Indicates an error occurred when accessing the
keychain. The @c NSLocalizedFailureReasonErrorKey field in the @c NSError.userInfo
dictionary will contain more information about the error encountered.
</li>
</ul>
*/
- (BOOL)signOut:(NSError *_Nullable *_Nullable)error;
/** @fn addAuthStateDidChangeListener:
@brief Registers a block as an "auth state did change" listener. To be invoked when:
+ The block is registered as a listener,
+ The current user changes, or,
+ The current user's access token changes.
@param listener The block to be invoked. The block is always invoked asynchronously on the main
thread, even for it's initial invocation after having been added as a listener.
@remarks The block is invoked immediately after adding it according to it's standard invocation
semantics, asynchronously on the main thread. Users should pay special attention to
making sure the block does not inadvertently retain objects which should not be retained by
the long-lived block. The block itself will be retained by @c FIRAuth until it is
unregistered or until the @c FIRAuth instance is otherwise deallocated.
@return A handle useful for manually unregistering the block as a listener.
*/
- (FIRAuthStateDidChangeListenerHandle)addAuthStateDidChangeListener:
(FIRAuthStateDidChangeListenerBlock)listener;
/** @fn removeAuthStateDidChangeListener:
@brief Unregisters a block as an "auth state did change" listener.
@param listenerHandle The handle for the listener.
*/
- (void)removeAuthStateDidChangeListener:(FIRAuthStateDidChangeListenerHandle)listenerHandle;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,31 @@
/** @file FIRAuthCredential.h
@brief Firebase Auth SDK
@copyright Copyright 2015 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
/** @class FIRAuthCredential
@brief Represents a credential.
*/
@interface FIRAuthCredential : NSObject
/** @property provider
@brief Gets the name of the identity provider for the credential.
*/
@property(nonatomic, copy, readonly) NSString *provider;
/** @fn init
@brief This is an abstract base class. Concrete instances should be created via factory
methods available in the various authentication provider libraries (like the Facebook
provider or the Google provider libraries.)
*/
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,176 @@
/** @file FIRAuthErrors.h
@brief Firebase Auth SDK
@copyright Copyright 2015 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
#import <Foundation/Foundation.h>
/** @class FIRAuthErrors
@remarks Error Codes common to all API Methods:
<ul>
<li>@c FIRAuthErrorCodeNetworkError</li>
<li>@c FIRAuthErrorCodeUserNotFound</li>
<li>@c FIRAuthErrorCodeUserTokenExpired</li>
<li>@c FIRAuthErrorCodeTooManyRequests</li>
<li>@c FIRAuthErrorCodeInvalidAPIKey</li>
<li>@c FIRAuthErrorCodeAppNotAuthorized</li>
<li>@c FIRAuthErrorCodeKeychainError</li>
<li>@c FIRAuthErrorCodeInternalError</li>
</ul>
@remarks Common error codes for @c FIRUser operations:
<ul>
<li>@c FIRAuthErrorCodeInvalidUserToken</li>
<li>@c FIRAuthErrorCodeUserDisabled</li>
</ul>
*/
@interface FIRAuthErrors
/**
@brief The Firebase Auth error domain.
*/
extern NSString *const FIRAuthErrorDomain;
/**
@brief The name of the key for the "error_name" string in the NSError userinfo dictionary.
*/
extern NSString *const FIRAuthErrorNameKey;
/**
@brief Error codes used by Firebase Auth.
*/
typedef NS_ENUM(NSInteger, FIRAuthErrorCode) {
/** Indicates a validation error with the custom token.
*/
FIRAuthErrorCodeInvalidCustomToken = 17000,
/** Indicates the service account and the API key belong to different projects.
*/
FIRAuthErrorCodeCustomTokenMismatch = 17002,
/** Indicates the IDP token or requestUri is invalid.
*/
FIRAuthErrorCodeInvalidCredential = 17004,
/** Indicates the user's account is disabled on the server.
*/
FIRAuthErrorCodeUserDisabled = 17005,
/** Indicates the administrator disabled sign in with the specified identity provider.
*/
FIRAuthErrorCodeOperationNotAllowed = 17006,
/** Indicates the email used to attempt a sign up is already in use.
*/
FIRAuthErrorCodeEmailAlreadyInUse = 17007,
/** Indicates the email is invalid.
*/
FIRAuthErrorCodeInvalidEmail = 17008,
/** Indicates the user attempted sign in with a wrong password.
*/
FIRAuthErrorCodeWrongPassword = 17009,
/** Indicates that too many requests were made to a server method.
*/
FIRAuthErrorCodeTooManyRequests = 17010,
/** Indicates the user account was not found.
*/
FIRAuthErrorCodeUserNotFound = 17011,
/** Indicates account linking is required.
*/
FIRAuthErrorCodeAccountExistsWithDifferentCredential = 17012,
/** Same enum as @c FIRAuthErrorCodeAccountExistsWithDifferentCredential ,
but with incorrect spelling. Only exists for backwards compatiblity.
*/
FIRAuthErrrorCodeAccountExistsWithDifferentCredential = 17012,
/** Indicates the user has attemped to change email or password more than 5 minutes after
signing in.
*/
FIRAuthErrorCodeRequiresRecentLogin = 17014,
/** Indicates an attempt to link a provider to which the account is already linked.
*/
FIRAuthErrorCodeProviderAlreadyLinked = 17015,
/** Indicates an attempt to unlink a provider that is not linked.
*/
FIRAuthErrorCodeNoSuchProvider = 17016,
/** Indicates user's saved auth credential is invalid, the user needs to sign in again.
*/
FIRAuthErrorCodeInvalidUserToken = 17017,
/** Indicates a network error occurred (such as a timeout, interrupted connection, or
unreachable host). These types of errors are often recoverable with a retry. The @c
NSUnderlyingError field in the @c NSError.userInfo dictionary will contain the error
encountered.
*/
FIRAuthErrorCodeNetworkError = 17020,
/** Indicates the saved token has expired, for example, the user may have changed account
password on another device. The user needs to sign in again on the device that made this
request.
*/
FIRAuthErrorCodeUserTokenExpired = 17021,
/** Indicates an invalid API key was supplied in the request.
*/
FIRAuthErrorCodeInvalidAPIKey = 17023,
/** Indicates that an attempt was made to reauthenticate with a user which is not the current
user.
*/
FIRAuthErrorCodeUserMismatch = 17024,
/** Indicates an attempt to link with a credential that has already been linked with a
different Firebase account
*/
FIRAuthErrorCodeCredentialAlreadyInUse = 17025,
/** Indicates an attempt to set a password that is considered too weak.
*/
FIRAuthErrorCodeWeakPassword = 17026,
/** Indicates the App is not authorized to use Firebase Authentication with the
provided API Key.
*/
FIRAuthErrorCodeAppNotAuthorized = 17028,
/** Indicates the OOB code is expired.
*/
FIRAuthErrorCodeExpiredActionCode = 17029,
/** Indicates the OOB code is invalid.
*/
FIRAuthErrorCodeInvalidActionCode = 17030,
/** Indicates that there are invalid parameters in the payload during a "send password reset
* email" attempt.
*/
FIRAuthErrorCodeInvalidMessagePayload = 17031,
/** Indicates that the sender email is invalid during a "send password reset email" attempt.
*/
FIRAuthErrorCodeInvalidSender = 17032,
/** Indicates that the recipient email is invalid.
*/
FIRAuthErrorCodeInvalidRecipientEmail = 17033,
/** Indicates an error occurred while attempting to access the keychain.
*/
FIRAuthErrorCodeKeychainError = 17995,
/** Indicates an internal error occurred.
*/
FIRAuthErrorCodeInternalError = 17999,
};
@end

View File

@@ -0,0 +1,40 @@
/** @file FIREmailPasswordAuthProvider.h
@brief Firebase Auth SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
#import <Foundation/Foundation.h>
@class FIRAuthCredential;
NS_ASSUME_NONNULL_BEGIN
/**
@brief A string constant identifying the email & password identity provider.
*/
extern NSString *const FIREmailPasswordAuthProviderID;
/** @class FIREmailPasswordAuthProvider
@brief A concrete implementation of @c FIRAuthProvider for Email & Password Sign In.
*/
@interface FIREmailPasswordAuthProvider : NSObject
/** @fn credentialWithEmail:password:
@brief Creates an @c FIRAuthCredential for an email & password sign in.
@param email The user's email address.
@param password The user's password.
@return A FIRAuthCredential containing the email & password credential.
*/
+ (FIRAuthCredential *)credentialWithEmail:(NSString *)email password:(NSString *)password;
/** @fn init
@brief This class is not meant to be initialized.
*/
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,39 @@
/** @file FIRFacebookAuthProvider.h
@brief Firebase Auth SDK
@copyright Copyright 2016 Google Inc.
@remarks Use of this SDK is subject to the Google APIs Terms of Service:
https://developers.google.com/terms/
*/
#import <Foundation/Foundation.h>
@class FIRAuthCredential;
NS_ASSUME_NONNULL_BEGIN
/**
@brief A string constant identifying the Facebook identity provider.
*/
extern NSString *const FIRFacebookAuthProviderID;
/** @class FIRFacebookAuthProvider
@brief Utility class for constructing Facebook credentials.
*/
@interface FIRFacebookAuthProvider : NSObject
/** @fn credentialWithAccessToken:
@brief Creates an @c FIRAuthCredential for a Facebook sign in.
@param accessToken The Access Token from Facebook.
@return A FIRAuthCredential containing the Facebook credentials.
*/
+ (FIRAuthCredential *)credentialWithAccessToken:(NSString *)accessToken;
/** @fn init
@brief This class should not be initialized.
*/
- (instancetype)init NS_UNAVAILABLE;
@end
NS_ASSUME_NONNULL_END

Some files were not shown because too many files have changed in this diff Show More