This commit is contained in:
Ben Harris 2017-05-20 17:25:57 -04:00
parent 6c4c5c24d4
commit 47fc031b4d
160 changed files with 8486 additions and 7 deletions

1
pg1

@ -1 +0,0 @@
Subproject commit 13f089c151f5ce05c23bcaa3fa4b41f627b5e325

1
pg1/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.DS_Store

View File

@ -0,0 +1,253 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
A42A87E71D7495FE00736BA6 /* List.m in Sources */ = {isa = PBXBuildFile; fileRef = A42A87E21D7495FE00736BA6 /* List.m */; };
A42A87E81D7495FE00736BA6 /* Node.m in Sources */ = {isa = PBXBuildFile; fileRef = A42A87E41D7495FE00736BA6 /* Node.m */; };
A42A87E91D7495FE00736BA6 /* PG1.m in Sources */ = {isa = PBXBuildFile; fileRef = A42A87E61D7495FE00736BA6 /* PG1.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
A42A87D51D74956E00736BA6 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
A42A87D71D74956E00736BA6 /* PG1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = PG1; sourceTree = BUILT_PRODUCTS_DIR; };
A42A87E11D7495FE00736BA6 /* List.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = List.h; path = PG1/List.h; sourceTree = "<group>"; };
A42A87E21D7495FE00736BA6 /* List.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = List.m; path = PG1/List.m; sourceTree = "<group>"; };
A42A87E31D7495FE00736BA6 /* Node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Node.h; path = PG1/Node.h; sourceTree = "<group>"; };
A42A87E41D7495FE00736BA6 /* Node.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Node.m; path = PG1/Node.m; sourceTree = "<group>"; };
A42A87E51D7495FE00736BA6 /* PG1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PG1.h; path = PG1/PG1.h; sourceTree = "<group>"; };
A42A87E61D7495FE00736BA6 /* PG1.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = PG1.m; path = PG1/PG1.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A42A87D41D74956E00736BA6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A42A87CE1D74956E00736BA6 = {
isa = PBXGroup;
children = (
A42A87E11D7495FE00736BA6 /* List.h */,
A42A87E21D7495FE00736BA6 /* List.m */,
A42A87E31D7495FE00736BA6 /* Node.h */,
A42A87E41D7495FE00736BA6 /* Node.m */,
A42A87E51D7495FE00736BA6 /* PG1.h */,
A42A87E61D7495FE00736BA6 /* PG1.m */,
A42A87D81D74956E00736BA6 /* Products */,
);
sourceTree = "<group>";
};
A42A87D81D74956E00736BA6 /* Products */ = {
isa = PBXGroup;
children = (
A42A87D71D74956E00736BA6 /* PG1 */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A42A87D61D74956E00736BA6 /* PG1 */ = {
isa = PBXNativeTarget;
buildConfigurationList = A42A87DE1D74956E00736BA6 /* Build configuration list for PBXNativeTarget "PG1" */;
buildPhases = (
A42A87D31D74956E00736BA6 /* Sources */,
A42A87D41D74956E00736BA6 /* Frameworks */,
A42A87D51D74956E00736BA6 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = PG1;
productName = PG1;
productReference = A42A87D71D74956E00736BA6 /* PG1 */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A42A87CF1D74956E00736BA6 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = CS344;
TargetAttributes = {
A42A87D61D74956E00736BA6 = {
CreatedOnToolsVersion = 7.3.1;
};
};
};
buildConfigurationList = A42A87D21D74956E00736BA6 /* Build configuration list for PBXProject "PG1" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = A42A87CE1D74956E00736BA6;
productRefGroup = A42A87D81D74956E00736BA6 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
A42A87D61D74956E00736BA6 /* PG1 */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
A42A87D31D74956E00736BA6 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A42A87E91D7495FE00736BA6 /* PG1.m in Sources */,
A42A87E71D7495FE00736BA6 /* List.m in Sources */,
A42A87E81D7495FE00736BA6 /* Node.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
A42A87DC1D74956E00736BA6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
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;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
A42A87DD1D74956E00736BA6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
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;
MACOSX_DEPLOYMENT_TARGET = 10.11;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = macosx;
};
name = Release;
};
A42A87DF1D74956E00736BA6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A42A87E01D74956E00736BA6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A42A87D21D74956E00736BA6 /* Build configuration list for PBXProject "PG1" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A42A87DC1D74956E00736BA6 /* Debug */,
A42A87DD1D74956E00736BA6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A42A87DE1D74956E00736BA6 /* Build configuration list for PBXNativeTarget "PG1" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A42A87DF1D74956E00736BA6 /* Debug */,
A42A87E01D74956E00736BA6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = A42A87CF1D74956E00736BA6 /* Project object */;
}

View File

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

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "PG1/Node.m"
timestampString = "495391129.210545"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "49"
endingLineNumber = "49"
landmarkName = "-remove:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0730"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A42A87D61D74956E00736BA6"
BuildableName = "PG1"
BlueprintName = "PG1"
ReferencedContainer = "container:PG1.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A42A87D61D74956E00736BA6"
BuildableName = "PG1"
BlueprintName = "PG1"
ReferencedContainer = "container:PG1.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 = "A42A87D61D74956E00736BA6"
BuildableName = "PG1"
BlueprintName = "PG1"
ReferencedContainer = "container:PG1.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A42A87D61D74956E00736BA6"
BuildableName = "PG1"
BlueprintName = "PG1"
ReferencedContainer = "container:PG1.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

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>SchemeUserState</key>
<dict>
<key>PG1.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>A42A87D61D74956E00736BA6</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

23
pg1/PG1/List.h Normal file
View File

@ -0,0 +1,23 @@
// Ben Harris
// List.h
#ifndef List_h
#define List_h
#import <Foundation/Foundation.h>
#include "Node.h"
@class Node;
@interface List : NSObject {
Node *head;
}
-(id) init;
-(void) print;
-(void) add:(NSString *)s;
-(void) remove:(NSString *)s;
@end
#endif

31
pg1/PG1/List.m Normal file
View File

@ -0,0 +1,31 @@
// Ben Harris
// PG1 List class
#include <Foundation/Foundation.h>
#include "List.h"
#include "Node.h"
@implementation List
-(id) init {
head = NULL;
return self;
}
-(void) print { [head print]; }
-(void) add:(NSString *)s {
if (head){
head = [head add:[s substringWithRange:NSMakeRange(5, s.length - 6)]];
}
else
head = [[Node alloc] init:[s substringWithRange:NSMakeRange(5, s.length - 6)] next:NULL];
}
-(void) remove:(NSString *)s {
NSString *query = [s substringWithRange:NSMakeRange(8, s.length - 9)];
printf("Removing all titles containing '%s'", [query UTF8String]);
head = [head remove:query];
}
@end

21
pg1/PG1/Node.h Normal file
View File

@ -0,0 +1,21 @@
// Ben Harris
// Node.h
#ifndef Node_h
#define Node_h
#import <Foundation/Foundation.h>
@interface Node: NSObject {
NSString *title;
Node *next;
}
-(id) init:(NSString *)s next:(Node *)n;
-(void) print;
-(Node *)add:(NSString *)title;
-(Node *) remove:(NSString *)s;
@end
#endif

53
pg1/PG1/Node.m Normal file
View File

@ -0,0 +1,53 @@
// Ben Harris
// PG1 Node class
#import <Foundation/Foundation.h>
#import "Node.h"
@implementation Node
-(id) init:(NSString *)s next:(Node *)n {
title = s;
next = n;
return self;
}
-(void) print {
printf(">\t%s\n", [title UTF8String]);
[next print];
}
-(Node *)add:(NSString *)s {
if ([s caseInsensitiveCompare:title] == NSOrderedSame) {
// ==
printf("Add aborted. Cannot add duplicates.\n");
return self;
}
if ([s caseInsensitiveCompare:title] == NSOrderedAscending) {
// s<title
return [[Node alloc] init:s next:self];
}
if (!next) {
next = [[Node alloc] init:s next:NULL];
return self;
}
next = [next add:s];
return self;
}
-(Node *) remove:(NSString *)s {
next = [next remove:s];
if([title localizedCaseInsensitiveContainsString:s] || s.length == 0) {
Node *t = next;
next = nil;
return t;
}
return self;
}
@end

8
pg1/PG1/PG1.h Normal file
View File

@ -0,0 +1,8 @@
// Ben Harris
#ifndef PG1_h
#define PG1_h
int main(int argc, const char * argv[]);
#endif

46
pg1/PG1/PG1.m Normal file
View File

@ -0,0 +1,46 @@
// Ben Harris
// CS344 PG1
#import <Foundation/Foundation.h>
#import "List.h"
int main(int argc, const char * argv[]){
@autoreleasepool {
List *list = [[List alloc] init];
printf("objcBookTitleLibrary v0.1 - type help for a list of commands\n");
char *line;
size_t lsz = 100;
line = malloc(lsz);
printf(">>> ");
getline(&line, &lsz, stdin);
line[strlen(line) - 1] = 0;
NSString *nsline = [NSString stringWithUTF8String:line];
while ([nsline caseInsensitiveCompare: @"exit"] != NSOrderedSame) {
if([nsline caseInsensitiveCompare: @"help"] == NSOrderedSame) printf("This program accepts the following commands:\n\n\tADD \"book title\"\n\tREMOVE \"search query\"\n\tPRINT\n\tEXIT\n\nhint: clear the library with REMOVE \"\"\nQuotation marks are mandatory.");
else if([[nsline lowercaseString] hasPrefix: @"add"]) {
printf("%s\n", line);
[list add: nsline];
}
else if([[nsline lowercaseString] hasPrefix: @"remove"]) {
printf("%s\n", line);
[list remove: nsline];
}
else if([nsline caseInsensitiveCompare: @"print"] == NSOrderedSame) {
printf("%s\n\n", line);
[list print];
}
else printf("Command not recognized. Type help if you don't understand the commands.");
printf("\n>>> ");
getline(&line, &lsz, stdin);
line[strlen(line) - 1] = 0;
nsline = [NSString stringWithUTF8String:line];
}
}
return 0;
}

59
pg1/README.md Normal file
View File

@ -0,0 +1,59 @@
# PG1-ios
CS344 PG1
[assignment description](http://philos.nmu.edu/cs344-01-16f/PG1.pdf)
Linked Lists in ObjC
---
### Northern Michigan University (Marquette Co, MI)
### CS 344-01-16F: iOS / iPhone Programming
## Program 1
#### Due: Wednesday 7 September 2016 1:00 P.M. EDT
### Library
Create a folder called “PG1” in the top level of your CS344-01-16F folder. Put ONLY your .m
and .h files into this folder. Place a (possibly empty) file or folder called “DONE” into this
folder when you are ready to have your programs graded.
### Write the following program in Objective C:
You are to write a program that adds book titles to a library. The library must be stored in a
linked list with the book titles appearing in alphabetical order within the linked list. There are to
be no loops in your linked list and linked list node classes; these classes must use recursion only.
Loops are allowed in your main. Your main may reference the linked list class, but it may not
reference the linked list node class in any way.
Your program will accept a series of commands for you to process.
`ADD "Book Title"`
> This adds a title to the linked list. The title is allowed to contain spaces. The title will begin and
end with quotes, but the quotes are NOT part of the title. If the book is already present, it will
not be added to the linked list. Titles are case-insensitive. If the list already contains "DOG,"
you should not be allowed to add "dog"
`PRINT`
> Prints out all books in the linked list in alphabetical order, case insensitive. "A" comes before
"b" and "a" comes before "B".
`REMOVE "substring"`
> Removes all books whose title contains the substring. For example, REMOVE "the" removes all
books that have "the" somewhere in the title, beginning, middle, or end, as a whole word or as a
partial word. Again, this is case insensitive. REMOVE "the" removes all titles with
"The","THE","ThE", etc.
`EXIT`
> Ends the program.
The commands themselves are case insensitive. For example, Exit, eXit, exit, etc. should all exit
the program.
Be sure your program is divided into appropriate classes and methods and is commented
appropriately.

1
pg2

@ -1 +0,0 @@
Subproject commit 40b5320f55600f221678b3837f6f79a365038d2f

62
pg2/.gitignore vendored Normal file
View File

@ -0,0 +1,62 @@
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xcuserstate
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
fastlane/report.xml
fastlane/screenshots
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
.DS_Store

View File

@ -0,0 +1,533 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
A436CF241D8709EB000DED06 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF231D8709EB000DED06 /* main.m */; };
A436CF271D8709EB000DED06 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF261D8709EB000DED06 /* AppDelegate.m */; };
A436CF2A1D8709EB000DED06 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF291D8709EB000DED06 /* RootViewController.m */; };
A436CF2D1D8709EB000DED06 /* DataViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF2C1D8709EB000DED06 /* DataViewController.m */; };
A436CF301D8709EB000DED06 /* ModelController.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF2F1D8709EB000DED06 /* ModelController.m */; };
A436CF331D8709EB000DED06 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A436CF311D8709EB000DED06 /* Main.storyboard */; };
A436CF351D8709EB000DED06 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A436CF341D8709EB000DED06 /* Assets.xcassets */; };
A436CF381D8709EB000DED06 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A436CF361D8709EB000DED06 /* LaunchScreen.storyboard */; };
A436CF431D8709EC000DED06 /* PG2Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF421D8709EC000DED06 /* PG2Tests.m */; };
A436CF4E1D8709EC000DED06 /* PG2UITests.m in Sources */ = {isa = PBXBuildFile; fileRef = A436CF4D1D8709EC000DED06 /* PG2UITests.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
A436CF3F1D8709EC000DED06 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A436CF171D8709EB000DED06 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A436CF1E1D8709EB000DED06;
remoteInfo = PG2;
};
A436CF4A1D8709EC000DED06 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A436CF171D8709EB000DED06 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A436CF1E1D8709EB000DED06;
remoteInfo = PG2;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
A436CF1F1D8709EB000DED06 /* PG2.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PG2.app; sourceTree = BUILT_PRODUCTS_DIR; };
A436CF231D8709EB000DED06 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A436CF251D8709EB000DED06 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A436CF261D8709EB000DED06 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A436CF281D8709EB000DED06 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = "<group>"; };
A436CF291D8709EB000DED06 /* RootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = "<group>"; };
A436CF2B1D8709EB000DED06 /* DataViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataViewController.h; sourceTree = "<group>"; };
A436CF2C1D8709EB000DED06 /* DataViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DataViewController.m; sourceTree = "<group>"; };
A436CF2E1D8709EB000DED06 /* ModelController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ModelController.h; sourceTree = "<group>"; };
A436CF2F1D8709EB000DED06 /* ModelController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ModelController.m; sourceTree = "<group>"; };
A436CF321D8709EB000DED06 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
A436CF341D8709EB000DED06 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
A436CF371D8709EB000DED06 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
A436CF391D8709EC000DED06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A436CF3E1D8709EC000DED06 /* PG2Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PG2Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A436CF421D8709EC000DED06 /* PG2Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PG2Tests.m; sourceTree = "<group>"; };
A436CF441D8709EC000DED06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A436CF491D8709EC000DED06 /* PG2UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PG2UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A436CF4D1D8709EC000DED06 /* PG2UITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PG2UITests.m; sourceTree = "<group>"; };
A436CF4F1D8709EC000DED06 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A436CF1C1D8709EB000DED06 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF3B1D8709EC000DED06 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF461D8709EC000DED06 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A436CF161D8709EB000DED06 = {
isa = PBXGroup;
children = (
A436CF211D8709EB000DED06 /* PG2 */,
A436CF411D8709EC000DED06 /* PG2Tests */,
A436CF4C1D8709EC000DED06 /* PG2UITests */,
A436CF201D8709EB000DED06 /* Products */,
);
sourceTree = "<group>";
};
A436CF201D8709EB000DED06 /* Products */ = {
isa = PBXGroup;
children = (
A436CF1F1D8709EB000DED06 /* PG2.app */,
A436CF3E1D8709EC000DED06 /* PG2Tests.xctest */,
A436CF491D8709EC000DED06 /* PG2UITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
A436CF211D8709EB000DED06 /* PG2 */ = {
isa = PBXGroup;
children = (
A436CF251D8709EB000DED06 /* AppDelegate.h */,
A436CF261D8709EB000DED06 /* AppDelegate.m */,
A436CF281D8709EB000DED06 /* RootViewController.h */,
A436CF291D8709EB000DED06 /* RootViewController.m */,
A436CF2B1D8709EB000DED06 /* DataViewController.h */,
A436CF2C1D8709EB000DED06 /* DataViewController.m */,
A436CF2E1D8709EB000DED06 /* ModelController.h */,
A436CF2F1D8709EB000DED06 /* ModelController.m */,
A436CF311D8709EB000DED06 /* Main.storyboard */,
A436CF341D8709EB000DED06 /* Assets.xcassets */,
A436CF361D8709EB000DED06 /* LaunchScreen.storyboard */,
A436CF391D8709EC000DED06 /* Info.plist */,
A436CF221D8709EB000DED06 /* Supporting Files */,
);
path = PG2;
sourceTree = "<group>";
};
A436CF221D8709EB000DED06 /* Supporting Files */ = {
isa = PBXGroup;
children = (
A436CF231D8709EB000DED06 /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
A436CF411D8709EC000DED06 /* PG2Tests */ = {
isa = PBXGroup;
children = (
A436CF421D8709EC000DED06 /* PG2Tests.m */,
A436CF441D8709EC000DED06 /* Info.plist */,
);
path = PG2Tests;
sourceTree = "<group>";
};
A436CF4C1D8709EC000DED06 /* PG2UITests */ = {
isa = PBXGroup;
children = (
A436CF4D1D8709EC000DED06 /* PG2UITests.m */,
A436CF4F1D8709EC000DED06 /* Info.plist */,
);
path = PG2UITests;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A436CF1E1D8709EB000DED06 /* PG2 */ = {
isa = PBXNativeTarget;
buildConfigurationList = A436CF521D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2" */;
buildPhases = (
A436CF1B1D8709EB000DED06 /* Sources */,
A436CF1C1D8709EB000DED06 /* Frameworks */,
A436CF1D1D8709EB000DED06 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = PG2;
productName = PG2;
productReference = A436CF1F1D8709EB000DED06 /* PG2.app */;
productType = "com.apple.product-type.application";
};
A436CF3D1D8709EC000DED06 /* PG2Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = A436CF551D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2Tests" */;
buildPhases = (
A436CF3A1D8709EC000DED06 /* Sources */,
A436CF3B1D8709EC000DED06 /* Frameworks */,
A436CF3C1D8709EC000DED06 /* Resources */,
);
buildRules = (
);
dependencies = (
A436CF401D8709EC000DED06 /* PBXTargetDependency */,
);
name = PG2Tests;
productName = PG2Tests;
productReference = A436CF3E1D8709EC000DED06 /* PG2Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
A436CF481D8709EC000DED06 /* PG2UITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = A436CF581D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2UITests" */;
buildPhases = (
A436CF451D8709EC000DED06 /* Sources */,
A436CF461D8709EC000DED06 /* Frameworks */,
A436CF471D8709EC000DED06 /* Resources */,
);
buildRules = (
);
dependencies = (
A436CF4B1D8709EC000DED06 /* PBXTargetDependency */,
);
name = PG2UITests;
productName = PG2UITests;
productReference = A436CF491D8709EC000DED06 /* PG2UITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A436CF171D8709EB000DED06 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = "Ben Harris";
TargetAttributes = {
A436CF1E1D8709EB000DED06 = {
CreatedOnToolsVersion = 7.3.1;
};
A436CF3D1D8709EC000DED06 = {
CreatedOnToolsVersion = 7.3.1;
TestTargetID = A436CF1E1D8709EB000DED06;
};
A436CF481D8709EC000DED06 = {
CreatedOnToolsVersion = 7.3.1;
TestTargetID = A436CF1E1D8709EB000DED06;
};
};
};
buildConfigurationList = A436CF1A1D8709EB000DED06 /* Build configuration list for PBXProject "PG2" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = A436CF161D8709EB000DED06;
productRefGroup = A436CF201D8709EB000DED06 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
A436CF1E1D8709EB000DED06 /* PG2 */,
A436CF3D1D8709EC000DED06 /* PG2Tests */,
A436CF481D8709EC000DED06 /* PG2UITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
A436CF1D1D8709EB000DED06 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A436CF381D8709EB000DED06 /* LaunchScreen.storyboard in Resources */,
A436CF351D8709EB000DED06 /* Assets.xcassets in Resources */,
A436CF331D8709EB000DED06 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF3C1D8709EC000DED06 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF471D8709EC000DED06 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
A436CF1B1D8709EB000DED06 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A436CF2D1D8709EB000DED06 /* DataViewController.m in Sources */,
A436CF271D8709EB000DED06 /* AppDelegate.m in Sources */,
A436CF301D8709EB000DED06 /* ModelController.m in Sources */,
A436CF241D8709EB000DED06 /* main.m in Sources */,
A436CF2A1D8709EB000DED06 /* RootViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF3A1D8709EC000DED06 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A436CF431D8709EC000DED06 /* PG2Tests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A436CF451D8709EC000DED06 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A436CF4E1D8709EC000DED06 /* PG2UITests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
A436CF401D8709EC000DED06 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A436CF1E1D8709EB000DED06 /* PG2 */;
targetProxy = A436CF3F1D8709EC000DED06 /* PBXContainerItemProxy */;
};
A436CF4B1D8709EC000DED06 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A436CF1E1D8709EB000DED06 /* PG2 */;
targetProxy = A436CF4A1D8709EC000DED06 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
A436CF311D8709EB000DED06 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
A436CF321D8709EB000DED06 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
A436CF361D8709EB000DED06 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
A436CF371D8709EB000DED06 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
A436CF501D8709EC000DED06 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
A436CF511D8709EC000DED06 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
A436CF531D8709EC000DED06 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = PG2/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A436CF541D8709EC000DED06 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = PG2/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
A436CF561D8709EC000DED06 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = PG2Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2Tests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PG2.app/PG2";
};
name = Debug;
};
A436CF571D8709EC000DED06 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = PG2Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2Tests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PG2.app/PG2";
};
name = Release;
};
A436CF591D8709EC000DED06 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = PG2UITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = PG2;
};
name = Debug;
};
A436CF5A1D8709EC000DED06 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = PG2UITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG2UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = PG2;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A436CF1A1D8709EB000DED06 /* Build configuration list for PBXProject "PG2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A436CF501D8709EC000DED06 /* Debug */,
A436CF511D8709EC000DED06 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A436CF521D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A436CF531D8709EC000DED06 /* Debug */,
A436CF541D8709EC000DED06 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
A436CF551D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2Tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A436CF561D8709EC000DED06 /* Debug */,
A436CF571D8709EC000DED06 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
A436CF581D8709EC000DED06 /* Build configuration list for PBXNativeTarget "PG2UITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A436CF591D8709EC000DED06 /* Debug */,
A436CF5A1D8709EC000DED06 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = A436CF171D8709EB000DED06 /* Project object */;
}

View File

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

17
pg2/PG2/PG2/AppDelegate.h Normal file
View File

@ -0,0 +1,17 @@
//
// AppDelegate.h
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

45
pg2/PG2/PG2/AppDelegate.m Normal file
View File

@ -0,0 +1,45 @@
//
// AppDelegate.m
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 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.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 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.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

View File

@ -0,0 +1,73 @@
{
"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"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

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

View File

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="NYa-RT-sol">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="h1c-Ex-8bu">
<objects>
<viewController id="NYa-RT-sol" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="dux-xJ-FVc"/>
<viewControllerLayoutGuide type="bottom" id="L4Z-ge-GCV"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="MDi-oA-Rih">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="What" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="FOc-P6-D76">
<rect key="frame" x="106" y="82" width="41" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Sqj-NT-65i">
<rect key="frame" x="111" y="322" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="3U8-6B-kXz" kind="show" id="Dkl-g9-Fu7"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="lQN-sh-1cI" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-62" y="-244"/>
</scene>
<!--View Controller-->
<scene sceneID="mTx-48-Ckp">
<objects>
<viewController id="3U8-6B-kXz" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="VfF-yR-DMM"/>
<viewControllerLayoutGuide type="bottom" id="0jh-Wx-hp3"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="SKZ-OU-u0z">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="do" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SC2-0r-0pq">
<rect key="frame" x="120" y="75" width="20" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uOd-Ip-rO1">
<rect key="frame" x="115" y="314" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="oFl-Zc-u0p" kind="show" id="c3T-Oh-VVL"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Cx4-EF-Ky3" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="581" y="-242"/>
</scene>
<!--View Controller-->
<scene sceneID="gxI-xo-Eeo">
<objects>
<viewController id="oFl-Zc-u0p" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ejf-Nk-jGJ"/>
<viewControllerLayoutGuide type="bottom" id="gzW-r9-fy5"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="XKt-Cb-FaL">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="you " textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="4kN-EF-Kcn">
<rect key="frame" x="107" y="84" width="33" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SMx-I2-amD">
<rect key="frame" x="108" y="285" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="QbC-xf-uOa" kind="show" id="dPS-9f-Mtw"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Rdk-di-DAO" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1227" y="-243"/>
</scene>
<!--View Controller-->
<scene sceneID="Ogw-Tw-bhy">
<objects>
<viewController id="QbC-xf-uOa" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="RrD-pZ-rXN"/>
<viewControllerLayoutGuide type="bottom" id="Sr5-wZ-XCi"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="fPR-Rg-2Su">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="get" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aEu-R4-iwT">
<rect key="frame" x="97" y="90" width="26" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vAJ-Zi-7tC">
<rect key="frame" x="97" y="293" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="1kx-r7-PvP" kind="show" id="e4k-8W-V3i"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="QXZ-9y-9mf" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="1935" y="-244"/>
</scene>
<!--View Controller-->
<scene sceneID="wFf-jT-KUw">
<objects>
<viewController id="1kx-r7-PvP" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="SaG-qw-2I0"/>
<viewControllerLayoutGuide type="bottom" id="vHb-bJ-LXo"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="GA9-56-JSI">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="if" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="old-Jy-Vc9">
<rect key="frame" x="93" y="91" width="10" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Omh-mw-wgn">
<rect key="frame" x="83" y="259" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="D22-MY-dOM" kind="show" id="5u7-rc-hcl"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="7cM-GQ-o3z" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="2552" y="-242"/>
</scene>
<!--View Controller-->
<scene sceneID="ngf-cJ-Wqf">
<objects>
<viewController id="D22-MY-dOM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="FVo-ny-beh"/>
<viewControllerLayoutGuide type="bottom" id="q9X-wM-o4Y"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="yZP-s4-X1z">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="you" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="pqf-Ke-mpB">
<rect key="frame" x="97" y="79" width="28" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="kEb-Rw-p2K">
<rect key="frame" x="97" y="237" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="a8P-rk-yxj" kind="show" id="h0D-6n-71a"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="vgr-Ki-byh" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3208" y="-242"/>
</scene>
<!--View Controller-->
<scene sceneID="dj5-bY-6Pm">
<objects>
<viewController id="a8P-rk-yxj" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="L3C-Fq-C9O"/>
<viewControllerLayoutGuide type="bottom" id="1M7-nV-Zeg"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="mlP-bl-7Mf">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="multiply" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qZG-DB-aeM">
<rect key="frame" x="81" y="74" width="61" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="st9-KK-7Mc">
<rect key="frame" x="96" y="264" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="VyX-Q8-tiP" kind="show" id="GGJ-mD-e8L"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="5oE-mC-hVZ" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3875" y="-243"/>
</scene>
<!--View Controller-->
<scene sceneID="Xux-oR-u7c">
<objects>
<viewController id="VyX-Q8-tiP" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="pwd-AX-RDV"/>
<viewControllerLayoutGuide type="bottom" id="rcS-6U-wNk"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="cUI-L8-XJn">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="six" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Khq-8h-FAU">
<rect key="frame" x="120" y="106" width="21" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="HZY-Pw-Suj">
<rect key="frame" x="94" y="252" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="sPn-i1-f2J" kind="show" id="jiO-5H-uTw"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="pOh-r1-XgY" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="4532" y="-242"/>
</scene>
<!--View Controller-->
<scene sceneID="rFd-RR-Fi7">
<objects>
<viewController id="sPn-i1-f2J" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="XTt-yw-5qx"/>
<viewControllerLayoutGuide type="bottom" id="BW0-tG-Zln"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="oyG-xJ-L2M">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jiU-aF-AtU">
<rect key="frame" x="99" y="285" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="bbB-4c-16s" kind="show" id="bfc-Kg-pci"/>
</connections>
</button>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="by" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Oph-TX-OQD">
<rect key="frame" x="99" y="122" width="19" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="rvl-TF-8Si" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="5161" y="-242"/>
</scene>
<!--View Controller-->
<scene sceneID="OEe-77-E35">
<objects>
<viewController id="bbB-4c-16s" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="agX-7q-8qk"/>
<viewControllerLayoutGuide type="bottom" id="Dp0-zW-bn7"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="BBu-G7-UBO">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="nine?" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OVe-WC-f08">
<rect key="frame" x="85" y="86" width="41" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="maS-rq-t3O">
<rect key="frame" x="85" y="244" width="30" height="30"/>
<state key="normal" title="next"/>
<connections>
<segue destination="SoZ-Um-T9C" kind="show" id="fuN-xi-Ard"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="GLg-kb-fRw" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="5802" y="-243"/>
</scene>
<!--View Controller-->
<scene sceneID="0EE-EW-hLY">
<objects>
<viewController id="SoZ-Um-T9C" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="nyh-jM-wLI"/>
<viewControllerLayoutGuide type="bottom" id="LqR-bO-DYO"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="wx9-K9-vAg">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="42" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZwR-vF-vd6">
<rect key="frame" x="80" y="69" width="21" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="yJx-3z-A1T">
<rect key="frame" x="53" y="242" width="74" height="30"/>
<state key="normal" title="start over?"/>
<connections>
<segue destination="NYa-RT-sol" kind="show" id="Uh2-vs-HUu"/>
</connections>
</button>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="PPU-Sj-NaP" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="6443" y="-242"/>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,17 @@
//
// DataViewController.h
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface DataViewController : UIViewController
@property (strong, nonatomic) IBOutlet UILabel *dataLabel;
@property (strong, nonatomic) id dataObject;
@end

View File

@ -0,0 +1,32 @@
//
// DataViewController.m
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "DataViewController.h"
@interface DataViewController ()
@end
@implementation DataViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.dataLabel.text = [self.dataObject description];
}
@end

47
pg2/PG2/PG2/Info.plist Normal file
View File

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

View File

@ -0,0 +1,19 @@
//
// ModelController.h
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@class DataViewController;
@interface ModelController : NSObject <UIPageViewControllerDataSource>
- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard;
- (NSUInteger)indexOfViewController:(DataViewController *)viewController;
@end

View File

@ -0,0 +1,84 @@
//
// ModelController.m
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "ModelController.h"
#import "DataViewController.h"
/*
A controller object that manages a simple model -- a collection of month names.
The controller serves as the data source for the page view controller; it therefore implements pageViewController:viewControllerBeforeViewController: and pageViewController:viewControllerAfterViewController:.
It also implements a custom method, viewControllerAtIndex: which is useful in the implementation of the data source methods, and in the initial configuration of the application.
There is no need to actually create view controllers for each page in advance -- indeed doing so incurs unnecessary overhead. Given the data model, these methods create, configure, and return a new view controller on demand.
*/
@interface ModelController ()
@property (readonly, strong, nonatomic) NSArray *pageData;
@end
@implementation ModelController
- (instancetype)init {
self = [super init];
if (self) {
// Create the data model.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
_pageData = [[dateFormatter monthSymbols] copy];
}
return self;
}
- (DataViewController *)viewControllerAtIndex:(NSUInteger)index storyboard:(UIStoryboard *)storyboard {
// Return the data view controller for the given index.
if (([self.pageData count] == 0) || (index >= [self.pageData count])) {
return nil;
}
// Create a new view controller and pass suitable data.
DataViewController *dataViewController = [storyboard instantiateViewControllerWithIdentifier:@"DataViewController"];
dataViewController.dataObject = self.pageData[index];
return dataViewController;
}
- (NSUInteger)indexOfViewController:(DataViewController *)viewController {
// Return the index of the given data view controller.
// For simplicity, this implementation uses a static array of model objects and the view controller stores the model object; you can therefore use the model object to identify the index.
return [self.pageData indexOfObject:viewController.dataObject];
}
#pragma mark - Page View Controller Data Source
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
if ((index == 0) || (index == NSNotFound)) {
return nil;
}
index--;
return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
NSUInteger index = [self indexOfViewController:(DataViewController *)viewController];
if (index == NSNotFound) {
return nil;
}
index++;
if (index == [self.pageData count]) {
return nil;
}
return [self viewControllerAtIndex:index storyboard:viewController.storyboard];
}
@end

View File

@ -0,0 +1,16 @@
//
// RootViewController.h
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface RootViewController : UIViewController <UIPageViewControllerDelegate>
@property (strong, nonatomic) UIPageViewController *pageViewController;
@end

View File

@ -0,0 +1,94 @@
//
// RootViewController.m
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "RootViewController.h"
#import "ModelController.h"
#import "DataViewController.h"
@interface RootViewController ()
@property (readonly, strong, nonatomic) ModelController *modelController;
@end
@implementation RootViewController
@synthesize modelController = _modelController;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// Configure the page view controller and add it as a child view controller.
self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
self.pageViewController.delegate = self;
DataViewController *startingViewController = [self.modelController viewControllerAtIndex:0 storyboard:self.storyboard];
NSArray *viewControllers = @[startingViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
self.pageViewController.dataSource = self.modelController;
[self addChildViewController:self.pageViewController];
[self.view addSubview:self.pageViewController.view];
// Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
CGRect pageViewRect = self.view.bounds;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
}
self.pageViewController.view.frame = pageViewRect;
[self.pageViewController didMoveToParentViewController:self];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (ModelController *)modelController {
// Return the model controller object, creating it if necessary.
// In more complex implementations, the model controller may be passed to the view controller.
if (!_modelController) {
_modelController = [[ModelController alloc] init];
}
return _modelController;
}
#pragma mark - UIPageViewController delegate methods
- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation {
if (UIInterfaceOrientationIsPortrait(orientation) || ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)) {
// In portrait orientation or on iPhone: Set the spine position to "min" and the page view controller's view controllers array to contain just one view controller. Setting the spine position to 'UIPageViewControllerSpineLocationMid' in landscape orientation sets the doubleSided property to YES, so set it to NO here.
UIViewController *currentViewController = self.pageViewController.viewControllers[0];
NSArray *viewControllers = @[currentViewController];
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
self.pageViewController.doubleSided = NO;
return UIPageViewControllerSpineLocationMin;
}
// In landscape orientation: Set set the spine location to "mid" and the page view controller's view controllers array to contain two view controllers. If the current page is even, set it to contain the current and next view controllers; if it is odd, set the array to contain the previous and current view controllers.
DataViewController *currentViewController = self.pageViewController.viewControllers[0];
NSArray *viewControllers = nil;
NSUInteger indexOfCurrentViewController = [self.modelController indexOfViewController:currentViewController];
if (indexOfCurrentViewController == 0 || indexOfCurrentViewController % 2 == 0) {
UIViewController *nextViewController = [self.modelController pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
viewControllers = @[currentViewController, nextViewController];
} else {
UIViewController *previousViewController = [self.modelController pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
viewControllers = @[previousViewController, currentViewController];
}
[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:nil];
return UIPageViewControllerSpineLocationMid;
}
@end

16
pg2/PG2/PG2/main.m Normal file
View File

@ -0,0 +1,16 @@
//
// main.m
// PG2
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

View File

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

View File

@ -0,0 +1,39 @@
//
// PG2Tests.m
// PG2Tests
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <XCTest/XCTest.h>
@interface PG2Tests : XCTestCase
@end
@implementation PG2Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end

View File

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

View File

@ -0,0 +1,40 @@
//
// PG2UITests.m
// PG2UITests
//
// Created by CS 344 Student on 9/12/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <XCTest/XCTest.h>
@interface PG2UITests : XCTestCase
@end
@implementation PG2UITests
- (void)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.
self.continueAfterFailure = NO;
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
[[[XCUIApplication alloc] init] 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.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
@end

12
pg2/README.md Normal file
View File

@ -0,0 +1,12 @@
Northern Michigan University (Marquette Co, MI)
CS 344-01-16F: iOS / iPhone Programming
# Program 2
Due: Friday 16 September 2016 1:00 P.M. EDT
# Simple App
Create a folder called “PG2” in the top level of your CS344-01-16F folder. Copy your XCode
project file into this folder. Place a (possibly empty) file or folder called “DONE” into this
folder when you are ready to have your programs graded.
Generate an app using only the storyboard without writing a single bit of manual code. This app
can be on a topic of your choice but you should have at least ten different views that you can
move around between with buttons. Make it reasonably cool.

1
pg3

@ -1 +0,0 @@
Subproject commit 4e305a8f933027e738ed3a13499e8d1360e16f15

62
pg3/.gitignore vendored Normal file
View File

@ -0,0 +1,62 @@
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xcuserstate
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
fastlane/report.xml
fastlane/screenshots
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
.DS_Store

View File

@ -0,0 +1,530 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
A4BE18A91D943EE900C59259 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BE18A81D943EE900C59259 /* main.m */; };
A4BE18AC1D943EE900C59259 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BE18AB1D943EE900C59259 /* AppDelegate.m */; };
A4BE18AF1D943EE900C59259 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BE18AE1D943EE900C59259 /* ViewController.m */; };
A4BE18B21D943EE900C59259 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A4BE18B01D943EE900C59259 /* Main.storyboard */; };
A4BE18B41D943EE900C59259 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A4BE18B31D943EE900C59259 /* Assets.xcassets */; };
A4BE18B71D943EE900C59259 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A4BE18B51D943EE900C59259 /* LaunchScreen.storyboard */; };
A4BE18C21D943EE900C59259 /* PG3Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BE18C11D943EE900C59259 /* PG3Tests.m */; };
A4BE18CD1D943EEA00C59259 /* PG3UITests.m in Sources */ = {isa = PBXBuildFile; fileRef = A4BE18CC1D943EEA00C59259 /* PG3UITests.m */; };
A4D6918D1DAC53FB00F18698 /* pngViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4D6918C1DAC53FB00F18698 /* pngViewController.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
A4BE18BE1D943EE900C59259 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A4BE189C1D943EE900C59259 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A4BE18A31D943EE900C59259;
remoteInfo = PG3;
};
A4BE18C91D943EE900C59259 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = A4BE189C1D943EE900C59259 /* Project object */;
proxyType = 1;
remoteGlobalIDString = A4BE18A31D943EE900C59259;
remoteInfo = PG3;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
A4BE18A41D943EE900C59259 /* PG3.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PG3.app; sourceTree = BUILT_PRODUCTS_DIR; };
A4BE18A81D943EE900C59259 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A4BE18AA1D943EE900C59259 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A4BE18AB1D943EE900C59259 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A4BE18AD1D943EE900C59259 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
A4BE18AE1D943EE900C59259 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
A4BE18B11D943EE900C59259 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
A4BE18B31D943EE900C59259 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
A4BE18B61D943EE900C59259 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
A4BE18B81D943EE900C59259 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A4BE18BD1D943EE900C59259 /* PG3Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PG3Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A4BE18C11D943EE900C59259 /* PG3Tests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PG3Tests.m; sourceTree = "<group>"; };
A4BE18C31D943EE900C59259 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A4BE18C81D943EE900C59259 /* PG3UITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PG3UITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A4BE18CC1D943EEA00C59259 /* PG3UITests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PG3UITests.m; sourceTree = "<group>"; };
A4BE18CE1D943EEA00C59259 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A4D6918B1DAC53FB00F18698 /* pngViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pngViewController.h; sourceTree = "<group>"; };
A4D6918C1DAC53FB00F18698 /* pngViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = pngViewController.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A4BE18A11D943EE900C59259 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18BA1D943EE900C59259 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18C51D943EE900C59259 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A4BE189B1D943EE900C59259 = {
isa = PBXGroup;
children = (
A4BE18A61D943EE900C59259 /* PG3 */,
A4BE18C01D943EE900C59259 /* PG3Tests */,
A4BE18CB1D943EEA00C59259 /* PG3UITests */,
A4BE18A51D943EE900C59259 /* Products */,
);
sourceTree = "<group>";
};
A4BE18A51D943EE900C59259 /* Products */ = {
isa = PBXGroup;
children = (
A4BE18A41D943EE900C59259 /* PG3.app */,
A4BE18BD1D943EE900C59259 /* PG3Tests.xctest */,
A4BE18C81D943EE900C59259 /* PG3UITests.xctest */,
);
name = Products;
sourceTree = "<group>";
};
A4BE18A61D943EE900C59259 /* PG3 */ = {
isa = PBXGroup;
children = (
A4BE18AA1D943EE900C59259 /* AppDelegate.h */,
A4BE18AB1D943EE900C59259 /* AppDelegate.m */,
A4BE18AD1D943EE900C59259 /* ViewController.h */,
A4BE18AE1D943EE900C59259 /* ViewController.m */,
A4BE18B01D943EE900C59259 /* Main.storyboard */,
A4BE18B31D943EE900C59259 /* Assets.xcassets */,
A4BE18B51D943EE900C59259 /* LaunchScreen.storyboard */,
A4BE18B81D943EE900C59259 /* Info.plist */,
A4BE18A71D943EE900C59259 /* Supporting Files */,
A4D6918B1DAC53FB00F18698 /* pngViewController.h */,
A4D6918C1DAC53FB00F18698 /* pngViewController.m */,
);
path = PG3;
sourceTree = "<group>";
};
A4BE18A71D943EE900C59259 /* Supporting Files */ = {
isa = PBXGroup;
children = (
A4BE18A81D943EE900C59259 /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
A4BE18C01D943EE900C59259 /* PG3Tests */ = {
isa = PBXGroup;
children = (
A4BE18C11D943EE900C59259 /* PG3Tests.m */,
A4BE18C31D943EE900C59259 /* Info.plist */,
);
path = PG3Tests;
sourceTree = "<group>";
};
A4BE18CB1D943EEA00C59259 /* PG3UITests */ = {
isa = PBXGroup;
children = (
A4BE18CC1D943EEA00C59259 /* PG3UITests.m */,
A4BE18CE1D943EEA00C59259 /* Info.plist */,
);
path = PG3UITests;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A4BE18A31D943EE900C59259 /* PG3 */ = {
isa = PBXNativeTarget;
buildConfigurationList = A4BE18D11D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3" */;
buildPhases = (
A4BE18A01D943EE900C59259 /* Sources */,
A4BE18A11D943EE900C59259 /* Frameworks */,
A4BE18A21D943EE900C59259 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = PG3;
productName = PG3;
productReference = A4BE18A41D943EE900C59259 /* PG3.app */;
productType = "com.apple.product-type.application";
};
A4BE18BC1D943EE900C59259 /* PG3Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = A4BE18D41D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3Tests" */;
buildPhases = (
A4BE18B91D943EE900C59259 /* Sources */,
A4BE18BA1D943EE900C59259 /* Frameworks */,
A4BE18BB1D943EE900C59259 /* Resources */,
);
buildRules = (
);
dependencies = (
A4BE18BF1D943EE900C59259 /* PBXTargetDependency */,
);
name = PG3Tests;
productName = PG3Tests;
productReference = A4BE18BD1D943EE900C59259 /* PG3Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
A4BE18C71D943EE900C59259 /* PG3UITests */ = {
isa = PBXNativeTarget;
buildConfigurationList = A4BE18D71D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3UITests" */;
buildPhases = (
A4BE18C41D943EE900C59259 /* Sources */,
A4BE18C51D943EE900C59259 /* Frameworks */,
A4BE18C61D943EE900C59259 /* Resources */,
);
buildRules = (
);
dependencies = (
A4BE18CA1D943EE900C59259 /* PBXTargetDependency */,
);
name = PG3UITests;
productName = PG3UITests;
productReference = A4BE18C81D943EE900C59259 /* PG3UITests.xctest */;
productType = "com.apple.product-type.bundle.ui-testing";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A4BE189C1D943EE900C59259 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = "Ben Harris";
TargetAttributes = {
A4BE18A31D943EE900C59259 = {
CreatedOnToolsVersion = 7.3.1;
};
A4BE18BC1D943EE900C59259 = {
CreatedOnToolsVersion = 7.3.1;
TestTargetID = A4BE18A31D943EE900C59259;
};
A4BE18C71D943EE900C59259 = {
CreatedOnToolsVersion = 7.3.1;
TestTargetID = A4BE18A31D943EE900C59259;
};
};
};
buildConfigurationList = A4BE189F1D943EE900C59259 /* Build configuration list for PBXProject "PG3" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = A4BE189B1D943EE900C59259;
productRefGroup = A4BE18A51D943EE900C59259 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
A4BE18A31D943EE900C59259 /* PG3 */,
A4BE18BC1D943EE900C59259 /* PG3Tests */,
A4BE18C71D943EE900C59259 /* PG3UITests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
A4BE18A21D943EE900C59259 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A4BE18B71D943EE900C59259 /* LaunchScreen.storyboard in Resources */,
A4BE18B41D943EE900C59259 /* Assets.xcassets in Resources */,
A4BE18B21D943EE900C59259 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18BB1D943EE900C59259 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18C61D943EE900C59259 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
A4BE18A01D943EE900C59259 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A4BE18AF1D943EE900C59259 /* ViewController.m in Sources */,
A4BE18AC1D943EE900C59259 /* AppDelegate.m in Sources */,
A4D6918D1DAC53FB00F18698 /* pngViewController.m in Sources */,
A4BE18A91D943EE900C59259 /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18B91D943EE900C59259 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A4BE18C21D943EE900C59259 /* PG3Tests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
A4BE18C41D943EE900C59259 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A4BE18CD1D943EEA00C59259 /* PG3UITests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
A4BE18BF1D943EE900C59259 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A4BE18A31D943EE900C59259 /* PG3 */;
targetProxy = A4BE18BE1D943EE900C59259 /* PBXContainerItemProxy */;
};
A4BE18CA1D943EE900C59259 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = A4BE18A31D943EE900C59259 /* PG3 */;
targetProxy = A4BE18C91D943EE900C59259 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
A4BE18B01D943EE900C59259 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
A4BE18B11D943EE900C59259 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
A4BE18B51D943EE900C59259 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
A4BE18B61D943EE900C59259 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
A4BE18CF1D943EEA00C59259 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
A4BE18D01D943EEA00C59259 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
A4BE18D21D943EEA00C59259 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = PG3/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A4BE18D31D943EEA00C59259 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = PG3/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
A4BE18D51D943EEA00C59259 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = PG3Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3Tests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PG3.app/PG3";
};
name = Debug;
};
A4BE18D61D943EEA00C59259 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
INFOPLIST_FILE = PG3Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3Tests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PG3.app/PG3";
};
name = Release;
};
A4BE18D81D943EEA00C59259 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = PG3UITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = PG3;
};
name = Debug;
};
A4BE18D91D943EEA00C59259 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
INFOPLIST_FILE = PG3UITests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.PG3UITests;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_TARGET_NAME = PG3;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A4BE189F1D943EE900C59259 /* Build configuration list for PBXProject "PG3" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A4BE18CF1D943EEA00C59259 /* Debug */,
A4BE18D01D943EEA00C59259 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A4BE18D11D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A4BE18D21D943EEA00C59259 /* Debug */,
A4BE18D31D943EEA00C59259 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A4BE18D41D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3Tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A4BE18D51D943EEA00C59259 /* Debug */,
A4BE18D61D943EEA00C59259 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A4BE18D71D943EEA00C59259 /* Build configuration list for PBXNativeTarget "PG3UITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A4BE18D81D943EEA00C59259 /* Debug */,
A4BE18D91D943EEA00C59259 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = A4BE189C1D943EE900C59259 /* Project object */;
}

View File

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

17
pg3/PG3/AppDelegate.h Normal file
View File

@ -0,0 +1,17 @@
//
// AppDelegate.h
// PG3
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

45
pg3/PG3/AppDelegate.m Normal file
View File

@ -0,0 +1,45 @@
//
// AppDelegate.m
// PG3
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 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.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 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.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

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,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="plw-VU-wAH">
<rect key="frame" x="10" y="61" width="30" height="30"/>
<state key="normal" title="go"/>
<connections>
<action selector="butt:" destination="BYZ-38-t0r" eventType="touchUpInside" id="REw-we-LiW"/>
</connections>
</button>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="1CZ-Fj-KQB">
<rect key="frame" x="0.0" y="90" width="600" height="556"/>
</scrollView>
<searchBar contentMode="redraw" translatesAutoresizingMaskIntoConstraints="NO" id="gb9-DD-YDB">
<rect key="frame" x="0.0" y="20" width="600" height="44"/>
<textInputTraits key="textInputTraits"/>
</searchBar>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="1CZ-Fj-KQB" firstAttribute="top" secondItem="8bC-Xf-vdC" secondAttribute="top" constant="90" id="3Gs-Fz-9Dj"/>
<constraint firstItem="plw-VU-wAH" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" constant="-10" id="Bog-Uy-8fa"/>
<constraint firstItem="1CZ-Fj-KQB" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="FYl-1s-Won"/>
<constraint firstItem="gb9-DD-YDB" firstAttribute="trailing" secondItem="1CZ-Fj-KQB" secondAttribute="trailing" id="M22-bz-vO3"/>
<constraint firstItem="gb9-DD-YDB" firstAttribute="leading" secondItem="1CZ-Fj-KQB" secondAttribute="leading" id="Myn-5X-Lh8"/>
<constraint firstItem="gb9-DD-YDB" firstAttribute="top" secondItem="y3c-jy-aDJ" secondAttribute="bottom" id="Nie-Ta-Z61"/>
<constraint firstItem="1CZ-Fj-KQB" firstAttribute="top" secondItem="plw-VU-wAH" secondAttribute="bottom" constant="-1" id="Q5g-Zu-Uys"/>
<constraint firstItem="wfy-db-euE" firstAttribute="top" secondItem="1CZ-Fj-KQB" secondAttribute="bottom" constant="-46" id="gFi-VH-m7O"/>
<constraint firstAttribute="trailing" secondItem="1CZ-Fj-KQB" secondAttribute="trailing" id="sg6-XF-NZc"/>
</constraints>
</view>
<connections>
<outlet property="dirtextfield" destination="gb9-DD-YDB" id="TmH-7g-qNj"/>
<outlet property="listscrollview" destination="1CZ-Fj-KQB" id="TEJ-Zx-NBR"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="243" y="537"/>
</scene>
<!--Png View Controller-->
<scene sceneID="IM0-pX-LlV">
<objects>
<viewController storyboardIdentifier="pngview" id="jiQ-x3-BCE" customClass="pngViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="4aN-Ql-x02"/>
<viewControllerLayoutGuide type="bottom" id="fvE-Dc-nyL"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="qMI-SP-niS">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="RVJ-qN-wiF">
<rect key="frame" x="20" y="0.0" width="34" height="30"/>
<state key="normal" title="back"/>
<connections>
<segue destination="BYZ-38-t0r" kind="show" identifier="backtodirlist" id="XWg-dk-xyq"/>
</connections>
</button>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="K6C-sI-jA4">
<rect key="frame" x="0.0" y="58" width="600" height="150"/>
<constraints>
<constraint firstAttribute="height" constant="150" id="XP5-v2-Q6g"/>
</constraints>
</imageView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="fvE-Dc-nyL" firstAttribute="top" secondItem="K6C-sI-jA4" secondAttribute="bottom" constant="392" id="7jx-vE-XPU"/>
<constraint firstItem="K6C-sI-jA4" firstAttribute="centerX" secondItem="qMI-SP-niS" secondAttribute="centerX" id="ArT-Gp-Qly"/>
<constraint firstItem="K6C-sI-jA4" firstAttribute="top" secondItem="RVJ-qN-wiF" secondAttribute="bottom" constant="28" id="ENi-uH-HPX"/>
<constraint firstItem="RVJ-qN-wiF" firstAttribute="leading" secondItem="qMI-SP-niS" secondAttribute="leadingMargin" id="LHH-c7-F21"/>
<constraint firstItem="RVJ-qN-wiF" firstAttribute="top" secondItem="qMI-SP-niS" secondAttribute="topMargin" id="QlI-Ys-vcW"/>
<constraint firstItem="K6C-sI-jA4" firstAttribute="leading" secondItem="qMI-SP-niS" secondAttribute="leading" id="vKs-lR-VfS"/>
</constraints>
</view>
<connections>
<outlet property="pngview" destination="K6C-sI-jA4" id="OPP-88-DqD"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Kfs-ck-gbl" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="967" y="526"/>
</scene>
</scenes>
</document>

47
pg3/PG3/Info.plist Normal file
View File

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

24
pg3/PG3/ViewController.h Normal file
View File

@ -0,0 +1,24 @@
//
// ViewController.h
// PG3
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
NSString *dir;
}
@property (weak, nonatomic) IBOutlet UISearchBar *dirtextfield;
@property (weak, nonatomic) IBOutlet UIScrollView *listscrollview;
- (IBAction)butt:(id)sender;
- (void)loadpngsfromdir;
-(void)setDir:(NSString *)newdir;
@end

124
pg3/PG3/ViewController.m Normal file
View File

@ -0,0 +1,124 @@
//
// ViewController.m
// PG3
//
// Created by Ben Harris on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "ViewController.h"
#import <Foundation/Foundation.h>
#import <dirent.h>
#import "pngViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize dirtextfield;
@synthesize listscrollview;
- (void)viewDidLoad {
[super viewDidLoad];
// dirtextfield.text = @"/Users/cs344student/benharri/pg3";
dirtextfield.placeholder = @"Enter a directory to look for PNGs";
listscrollview.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-0);
self.automaticallyAdjustsScrollViewInsets= NO;
listscrollview.scrollEnabled= YES;
listscrollview.userInteractionEnabled= YES;
[listscrollview setShowsHorizontalScrollIndicator:NO];
[listscrollview setShowsVerticalScrollIndicator:YES];
[self.view addSubview:listscrollview];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void) viewDidAppear:(BOOL)animated {
if (![dir isEqualToString:@""]) {
dirtextfield.text = dir;
NSLog(@"dir var isnot empty");
NSLog(@"%@", dir);
[self loadpngsfromdir];
}
}
-(void)setDir:(NSString *)newdir {
dir = newdir;
}
- (void) loadpngsfromdir {
// dir = dir?dir:dirtextfield.text;
DIR *dd = opendir([dir UTF8String]);
if(!dd) return;
struct dirent *entry;
int offset = 0;
while ((entry = readdir(dd)) != NULL) {
NSString *flname = [[NSString alloc] initWithUTF8String:entry->d_name];
NSString *extension = [flname pathExtension];
if ([flname isEqualToString:@"."]
|| [flname isEqualToString:@".."]
|| [extension caseInsensitiveCompare:@"png"] != NSOrderedSame) continue;
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self
action:@selector(showimage:)
forControlEvents:UIControlEventTouchUpInside];
[button setTitle:flname forState:UIControlStateNormal];
button.frame = CGRectMake(0.0, offset * 60, 320.0, 40.0);
button.backgroundColor = [UIColor blackColor];
[listscrollview addSubview:button];
NSLog(@"%@", flname);
offset++;
}
listscrollview.contentSize= CGSizeMake(listscrollview.frame.size.width ,60 + offset*60);
}
- (IBAction)butt:(id)sender {
dir = dirtextfield.text;
[self loadpngsfromdir];
}
-(IBAction)showimage:(id)sender {
NSString *fpath = dir;
if (![dir hasSuffix:@"/"]) fpath = [fpath stringByAppendingString:@"/"];
UIButton *curbutt = (UIButton*) sender;
fpath = [fpath stringByAppendingString:curbutt.currentTitle];
NSLog(@"%@", fpath);
pngViewController * pngview = [self.storyboard instantiateViewControllerWithIdentifier:@"pngview"];
[pngview setPath:fpath];
[pngview setDir:dir];
[self presentViewController:pngview animated:YES completion:nil];
}
@end

16
pg3/PG3/main.m Normal file
View File

@ -0,0 +1,16 @@
//
// main.m
// PG3
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

View File

@ -0,0 +1,20 @@
//
// pngViewController.h
// PG3
//
// Created by CS 344 Student on 10/10/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface pngViewController : UIViewController {
NSString *path;
NSString *dir;
}
@property (weak, nonatomic) IBOutlet UIImageView *pngview;
-(void) setPath:(NSString *)fpath;
-(void) setDir:(NSString *)newdir;
@end

View File

@ -0,0 +1,61 @@
//
// pngViewController.m
// PG3
//
// Created by CS 344 Student on 10/10/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import "pngViewController.h"
#import "ViewController.h"
@interface pngViewController ()
@end
@implementation pngViewController
@synthesize pngview;
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UIImage *img = [UIImage imageWithContentsOfFile:path];
// UIImageView *imgView = [[UIImageView alloc] initWithImage:img];
[pngview setImage:img];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) setPath:(NSString *)fpath {
path = fpath;
}
-(void) setDir:(NSString *)newdir {
dir = newdir;
}
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
// NSLog(@"prepareforsegue");
if ([segue.identifier isEqualToString:@"backtodirlist"]) {
// NSLog(@"backtodirlist");
// ViewController *vc = segue.destinationViewController;
[segue.destinationViewController setDir:dir];
[segue.destinationViewController loadpngsfromdir];
}
}
- (IBAction)backbutton:(id)sender {
}
@end

24
pg3/PG3Tests/Info.plist Normal file
View File

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

39
pg3/PG3Tests/PG3Tests.m Normal file
View File

@ -0,0 +1,39 @@
//
// PG3Tests.m
// PG3Tests
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <XCTest/XCTest.h>
@interface PG3Tests : XCTestCase
@end
@implementation PG3Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
- (void)testPerformanceExample {
// This is an example of a performance test case.
[self measureBlock:^{
// Put the code you want to measure the time of here.
}];
}
@end

24
pg3/PG3UITests/Info.plist Normal file
View File

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

View File

@ -0,0 +1,40 @@
//
// PG3UITests.m
// PG3UITests
//
// Created by CS344 Student on 9/22/16.
// Copyright © 2016 Ben Harris. All rights reserved.
//
#import <XCTest/XCTest.h>
@interface PG3UITests : XCTestCase
@end
@implementation PG3UITests
- (void)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.
self.continueAfterFailure = NO;
// UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method.
[[[XCUIApplication alloc] init] 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.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// Use recording to get started writing UI tests.
// Use XCTAssert and related functions to verify your tests produce the correct results.
}
@end

11
pg3/README.md Normal file
View File

@ -0,0 +1,11 @@
# CS344 Program 3
## Due Wednesday September 28
Program 3
Due: Wednesday 28 September 2016 1:00 P.M. EDT
Write an app for the iPhone Simulator that does the following:
+ It should allow the user to enter a folder name.
+ It should scan that folder and generate a menu listing the names of all files ending in ".png" .
+ Selecting an item from that menu should display that image on the screen, along with a back button that returns you to the menu.

BIN
pg3/float.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 600 KiB

BIN
pg3/papua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

BIN
pg3/png.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
pg3/water.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

1
pg4

@ -1 +0,0 @@
Subproject commit 37490b9ce61439a2470c9bb2ec4c719d40c2ca5d

2
pg4/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store

BIN
pg4/app.db Normal file

Binary file not shown.

View File

@ -0,0 +1,332 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
2A6F1FBB1DF357BF00E5244B /* EditAddTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A6F1FBA1DF357BF00E5244B /* EditAddTableViewController.m */; settings = {ASSET_TAGS = (); }; };
A47005FB1DF0A47E007D7CE1 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A47005FA1DF0A47E007D7CE1 /* main.m */; };
A47005FE1DF0A47E007D7CE1 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A47005FD1DF0A47E007D7CE1 /* AppDelegate.m */; };
A47006041DF0A47E007D7CE1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A47006021DF0A47E007D7CE1 /* Main.storyboard */; };
A47006061DF0A47E007D7CE1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A47006051DF0A47E007D7CE1 /* Assets.xcassets */; };
A47006091DF0A47E007D7CE1 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A47006071DF0A47E007D7CE1 /* LaunchScreen.storyboard */; };
A4972AB61DF0A7EA00792F0A /* ProfListTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A4972AB51DF0A7EA00792F0A /* ProfListTableViewController.m */; };
A4972ABA1DF0A9D100792F0A /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = A4972AB91DF0A9D100792F0A /* libsqlite3.tbd */; };
A4972ABC1DF0B19100792F0A /* app.db in Resources */ = {isa = PBXBuildFile; fileRef = A4972ABB1DF0B19100792F0A /* app.db */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2A6F1FB91DF357BF00E5244B /* EditAddTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EditAddTableViewController.h; sourceTree = "<group>"; };
2A6F1FBA1DF357BF00E5244B /* EditAddTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EditAddTableViewController.m; sourceTree = "<group>"; };
A47005F61DF0A47E007D7CE1 /* pg4.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = pg4.app; sourceTree = BUILT_PRODUCTS_DIR; };
A47005FA1DF0A47E007D7CE1 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A47005FC1DF0A47E007D7CE1 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A47005FD1DF0A47E007D7CE1 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A47006031DF0A47E007D7CE1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
A47006051DF0A47E007D7CE1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
A47006081DF0A47E007D7CE1 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
A470060A1DF0A47E007D7CE1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A4972AB41DF0A7EA00792F0A /* ProfListTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProfListTableViewController.h; sourceTree = "<group>"; };
A4972AB51DF0A7EA00792F0A /* ProfListTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProfListTableViewController.m; sourceTree = "<group>"; };
A4972AB91DF0A9D100792F0A /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
A4972ABB1DF0B19100792F0A /* app.db */ = {isa = PBXFileReference; lastKnownFileType = file; path = app.db; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A47005F31DF0A47E007D7CE1 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
A4972ABA1DF0A9D100792F0A /* libsqlite3.tbd in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A47005ED1DF0A47E007D7CE1 = {
isa = PBXGroup;
children = (
A4972AB91DF0A9D100792F0A /* libsqlite3.tbd */,
A47005F81DF0A47E007D7CE1 /* pg4 */,
A47005F71DF0A47E007D7CE1 /* Products */,
);
sourceTree = "<group>";
};
A47005F71DF0A47E007D7CE1 /* Products */ = {
isa = PBXGroup;
children = (
A47005F61DF0A47E007D7CE1 /* pg4.app */,
);
name = Products;
sourceTree = "<group>";
};
A47005F81DF0A47E007D7CE1 /* pg4 */ = {
isa = PBXGroup;
children = (
A47005FC1DF0A47E007D7CE1 /* AppDelegate.h */,
A47005FD1DF0A47E007D7CE1 /* AppDelegate.m */,
A4972AB41DF0A7EA00792F0A /* ProfListTableViewController.h */,
A4972AB51DF0A7EA00792F0A /* ProfListTableViewController.m */,
2A6F1FB91DF357BF00E5244B /* EditAddTableViewController.h */,
2A6F1FBA1DF357BF00E5244B /* EditAddTableViewController.m */,
A4972ABB1DF0B19100792F0A /* app.db */,
A47006021DF0A47E007D7CE1 /* Main.storyboard */,
A47006051DF0A47E007D7CE1 /* Assets.xcassets */,
A47006071DF0A47E007D7CE1 /* LaunchScreen.storyboard */,
A470060A1DF0A47E007D7CE1 /* Info.plist */,
A47005F91DF0A47E007D7CE1 /* Supporting Files */,
);
path = pg4;
sourceTree = "<group>";
};
A47005F91DF0A47E007D7CE1 /* Supporting Files */ = {
isa = PBXGroup;
children = (
A47005FA1DF0A47E007D7CE1 /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A47005F51DF0A47E007D7CE1 /* pg4 */ = {
isa = PBXNativeTarget;
buildConfigurationList = A470060D1DF0A47E007D7CE1 /* Build configuration list for PBXNativeTarget "pg4" */;
buildPhases = (
A47005F21DF0A47E007D7CE1 /* Sources */,
A47005F31DF0A47E007D7CE1 /* Frameworks */,
A47005F41DF0A47E007D7CE1 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = pg4;
productName = pg4;
productReference = A47005F61DF0A47E007D7CE1 /* pg4.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A47005EE1DF0A47E007D7CE1 /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = benharris;
TargetAttributes = {
A47005F51DF0A47E007D7CE1 = {
CreatedOnToolsVersion = 7.3.1;
};
};
};
buildConfigurationList = A47005F11DF0A47E007D7CE1 /* Build configuration list for PBXProject "pg4" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = A47005ED1DF0A47E007D7CE1;
productRefGroup = A47005F71DF0A47E007D7CE1 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
A47005F51DF0A47E007D7CE1 /* pg4 */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
A47005F41DF0A47E007D7CE1 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A47006091DF0A47E007D7CE1 /* LaunchScreen.storyboard in Resources */,
A47006061DF0A47E007D7CE1 /* Assets.xcassets in Resources */,
A47006041DF0A47E007D7CE1 /* Main.storyboard in Resources */,
A4972ABC1DF0B19100792F0A /* app.db in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
A47005F21DF0A47E007D7CE1 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A47005FE1DF0A47E007D7CE1 /* AppDelegate.m in Sources */,
A4972AB61DF0A7EA00792F0A /* ProfListTableViewController.m in Sources */,
A47005FB1DF0A47E007D7CE1 /* main.m in Sources */,
2A6F1FBB1DF357BF00E5244B /* EditAddTableViewController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
A47006021DF0A47E007D7CE1 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
A47006031DF0A47E007D7CE1 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
A47006071DF0A47E007D7CE1 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
A47006081DF0A47E007D7CE1 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
A470060B1DF0A47E007D7CE1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
A470060C1DF0A47E007D7CE1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
A470060E1DF0A47E007D7CE1 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = pg4/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
);
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.pg4;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A470060F1DF0A47E007D7CE1 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = pg4/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(SYSTEM_LIBRARY_DIR)/Tcl/sqlite3",
);
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.pg4;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A47005F11DF0A47E007D7CE1 /* Build configuration list for PBXProject "pg4" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A470060B1DF0A47E007D7CE1 /* Debug */,
A470060C1DF0A47E007D7CE1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A470060D1DF0A47E007D7CE1 /* Build configuration list for PBXNativeTarget "pg4" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A470060E1DF0A47E007D7CE1 /* Debug */,
A470060F1DF0A47E007D7CE1 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = A47005EE1DF0A47E007D7CE1 /* Project object */;
}

View File

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

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
shouldBeEnabled = "No"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "pg4/ProfListTableViewController.m"
timestampString = "502512363.246175"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "162"
endingLineNumber = "162"
landmarkName = "-prepareForSegue:sender:"
landmarkType = "5">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0700"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.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 = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

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>SchemeUserState</key>
<dict>
<key>pg4.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>A47005F51DF0A47E007D7CE1</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0730"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.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 = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A47005F51DF0A47E007D7CE1"
BuildableName = "pg4.app"
BlueprintName = "pg4"
ReferencedContainer = "container:pg4.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

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>SchemeUserState</key>
<dict>
<key>pg4.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>A47005F51DF0A47E007D7CE1</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

17
pg4/pg4/AppDelegate.h Normal file
View File

@ -0,0 +1,17 @@
//
// AppDelegate.h
// pg4
//
// Created by CS 344 Student on 12/1/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

45
pg4/pg4/AppDelegate.m Normal file
View File

@ -0,0 +1,45 @@
//
// AppDelegate.m
// pg4
//
// Created by CS 344 Student on 12/1/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 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.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 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.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

View File

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

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8150" systemVersion="15A204g" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8122"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<animations/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,262 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="kge-42-FzN">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<scenes>
<!--Prof List Table View Controller-->
<scene sceneID="hco-dK-dug">
<objects>
<tableViewController id="bW2-S2-zYB" customClass="ProfListTableViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" id="2KG-DO-9Z3">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<prototypes>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="prof_cell" id="rps-SQ-utk">
<rect key="frame" x="0.0" y="92" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="rps-SQ-utk" id="mpS-Nk-HJV">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
</tableViewCellContentView>
<connections>
<segue destination="reR-RM-vy9" kind="show" identifier="showProf" id="wfh-zX-1wV"/>
</connections>
</tableViewCell>
</prototypes>
<connections>
<outlet property="dataSource" destination="bW2-S2-zYB" id="I7s-3l-mnn"/>
<outlet property="delegate" destination="bW2-S2-zYB" id="1NJ-n6-heH"/>
</connections>
</tableView>
<navigationItem key="navigationItem" id="9yc-Mt-xXi">
<barButtonItem key="rightBarButtonItem" systemItem="add" id="g88-fR-tTJ">
<connections>
<segue destination="reR-RM-vy9" kind="show" id="2ki-SC-flz"/>
</connections>
</barButtonItem>
</navigationItem>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="sGB-qi-hxB" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="881" y="450"/>
</scene>
<!--Edit Add Table View Controller-->
<scene sceneID="jf6-Uc-d5P">
<objects>
<tableViewController id="reR-RM-vy9" customClass="EditAddTableViewController" sceneMemberID="viewController">
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="grouped" separatorStyle="default" rowHeight="44" sectionHeaderHeight="18" sectionFooterHeight="18" id="I9Y-IF-Dwu">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="0.93725490199999995" green="0.93725490199999995" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
<sections>
<tableViewSection headerTitle="Name" footerTitle="Required" id="JhM-iq-Stb">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="formCell" id="yst-sI-r1K">
<rect key="frame" x="0.0" y="114" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="yst-sI-r1K" id="j05-Mv-KSu">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Name" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="TZ4-sK-Kt9">
<rect key="frame" x="18" y="8" width="45" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="rja-GT-Vxw">
<rect key="frame" x="71" y="8" width="1" height="27"/>
<color key="backgroundColor" red="0.60613665803108807" green="0.60613665803108807" blue="0.60613665803108807" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="1" id="4Hg-N2-RRx"/>
</constraints>
</view>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="RLO-iL-B6N">
<rect key="frame" x="80" y="8" width="232" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="RLO-iL-B6N" firstAttribute="leading" secondItem="rja-GT-Vxw" secondAttribute="trailing" constant="8" id="1z8-Uf-rhe"/>
<constraint firstAttribute="trailing" secondItem="RLO-iL-B6N" secondAttribute="trailing" constant="8" id="CxH-Pq-1zN"/>
<constraint firstItem="TZ4-sK-Kt9" firstAttribute="top" secondItem="j05-Mv-KSu" secondAttribute="topMargin" id="Geu-Ww-PxQ"/>
<constraint firstAttribute="bottomMargin" secondItem="TZ4-sK-Kt9" secondAttribute="bottom" id="LKq-8H-DBr"/>
<constraint firstItem="rja-GT-Vxw" firstAttribute="top" secondItem="j05-Mv-KSu" secondAttribute="topMargin" id="PLB-Tq-2a3"/>
<constraint firstItem="RLO-iL-B6N" firstAttribute="top" secondItem="j05-Mv-KSu" secondAttribute="top" constant="8" id="QQ1-hD-LS2"/>
<constraint firstItem="rja-GT-Vxw" firstAttribute="leading" secondItem="TZ4-sK-Kt9" secondAttribute="trailing" constant="8" id="TVf-Li-2Fw"/>
<constraint firstItem="TZ4-sK-Kt9" firstAttribute="leading" secondItem="j05-Mv-KSu" secondAttribute="leadingMargin" constant="32" id="W4J-cC-4Vc"/>
<constraint firstItem="RLO-iL-B6N" firstAttribute="leading" secondItem="rja-GT-Vxw" secondAttribute="trailing" constant="8" id="ZLS-Qi-NXO"/>
<constraint firstItem="TZ4-sK-Kt9" firstAttribute="leading" secondItem="j05-Mv-KSu" secondAttribute="leadingMargin" constant="10" id="aC8-5o-KkB"/>
<constraint firstAttribute="bottomMargin" secondItem="rja-GT-Vxw" secondAttribute="bottom" id="aic-yC-Vyh"/>
<constraint firstAttribute="bottom" secondItem="RLO-iL-B6N" secondAttribute="bottom" constant="8" id="gHA-4S-qld"/>
<constraint firstItem="rja-GT-Vxw" firstAttribute="leading" secondItem="TZ4-sK-Kt9" secondAttribute="trailing" constant="8" id="qwI-Wg-blJ"/>
<constraint firstItem="rja-GT-Vxw" firstAttribute="top" secondItem="j05-Mv-KSu" secondAttribute="topMargin" id="w6c-hP-kcl"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="W4J-cC-4Vc"/>
<exclude reference="TVf-Li-2Fw"/>
<exclude reference="ZLS-Qi-NXO"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
<tableViewSection headerTitle="Contact Info" id="vHW-8j-s34">
<cells>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="formCell" id="R9o-pS-Rls">
<rect key="frame" x="0.0" y="225" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="R9o-pS-Rls" id="wMd-cp-hsS">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Dept" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mM2-bk-ArN">
<rect key="frame" x="18" y="8" width="38" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Dv9-oC-Jal">
<rect key="frame" x="64" y="8" width="1" height="27"/>
<color key="backgroundColor" red="0.60613665800000005" green="0.60613665800000005" blue="0.60613665800000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="1" id="JI9-zX-KQa"/>
</constraints>
</view>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="Ma6-Fz-ARd">
<rect key="frame" x="73" y="8" width="239" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="Ma6-Fz-ARd" firstAttribute="leading" secondItem="Dv9-oC-Jal" secondAttribute="trailing" constant="8" id="BWk-YW-gmc"/>
<constraint firstItem="Dv9-oC-Jal" firstAttribute="top" secondItem="wMd-cp-hsS" secondAttribute="topMargin" id="Cx7-bP-VJq"/>
<constraint firstItem="mM2-bk-ArN" firstAttribute="leading" secondItem="wMd-cp-hsS" secondAttribute="leadingMargin" constant="10" id="Kx7-zt-gt3"/>
<constraint firstItem="Ma6-Fz-ARd" firstAttribute="top" secondItem="wMd-cp-hsS" secondAttribute="top" constant="8" id="QOU-s2-dnQ"/>
<constraint firstItem="mM2-bk-ArN" firstAttribute="top" secondItem="wMd-cp-hsS" secondAttribute="topMargin" id="TT3-h8-k27"/>
<constraint firstAttribute="trailing" secondItem="Ma6-Fz-ARd" secondAttribute="trailing" constant="8" id="aBD-tU-Ifs"/>
<constraint firstItem="Dv9-oC-Jal" firstAttribute="leading" secondItem="mM2-bk-ArN" secondAttribute="trailing" constant="8" id="dSO-e5-9TG"/>
<constraint firstAttribute="bottomMargin" secondItem="Dv9-oC-Jal" secondAttribute="bottom" id="dpH-ww-z8T"/>
<constraint firstAttribute="bottom" secondItem="Ma6-Fz-ARd" secondAttribute="bottom" constant="8" id="hWt-U7-HWk"/>
<constraint firstItem="Dv9-oC-Jal" firstAttribute="top" secondItem="wMd-cp-hsS" secondAttribute="topMargin" id="thy-rg-Tyi"/>
<constraint firstAttribute="bottomMargin" secondItem="mM2-bk-ArN" secondAttribute="bottom" id="uov-ce-GCa"/>
<constraint firstItem="Ma6-Fz-ARd" firstAttribute="leading" secondItem="Dv9-oC-Jal" secondAttribute="trailing" constant="8" id="vZj-Cv-kIv"/>
<constraint firstItem="Dv9-oC-Jal" firstAttribute="leading" secondItem="mM2-bk-ArN" secondAttribute="trailing" constant="8" id="w22-Pj-ElH"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="dSO-e5-9TG"/>
<exclude reference="vZj-Cv-kIv"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="formCell" id="vqb-MK-JFH">
<rect key="frame" x="0.0" y="269" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="vqb-MK-JFH" id="7pv-bs-Dyl">
<rect key="frame" x="0.0" y="0.0" width="320" height="43"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Email" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="78Q-KF-03r">
<rect key="frame" x="18" y="8" width="41" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hYe-CA-pIg">
<rect key="frame" x="67" y="8" width="1" height="27"/>
<color key="backgroundColor" red="0.60613665800000005" green="0.60613665800000005" blue="0.60613665800000005" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="width" constant="1" id="t5U-I8-Mwy"/>
</constraints>
</view>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="bcl-TC-YQE">
<rect key="frame" x="76" y="8" width="236" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<textInputTraits key="textInputTraits"/>
</textField>
</subviews>
<constraints>
<constraint firstItem="bcl-TC-YQE" firstAttribute="leading" secondItem="hYe-CA-pIg" secondAttribute="trailing" constant="8" id="5JH-q4-Izf"/>
<constraint firstItem="78Q-KF-03r" firstAttribute="top" secondItem="7pv-bs-Dyl" secondAttribute="topMargin" id="5dl-mK-8aH"/>
<constraint firstAttribute="bottom" secondItem="bcl-TC-YQE" secondAttribute="bottom" constant="8" id="6xR-uO-mHZ"/>
<constraint firstAttribute="bottomMargin" secondItem="hYe-CA-pIg" secondAttribute="bottom" id="Awq-zO-91Z"/>
<constraint firstItem="hYe-CA-pIg" firstAttribute="leading" secondItem="78Q-KF-03r" secondAttribute="trailing" constant="8" id="FUB-MT-mK2"/>
<constraint firstAttribute="trailing" secondItem="bcl-TC-YQE" secondAttribute="trailing" constant="8" id="HV3-SG-xNW"/>
<constraint firstAttribute="bottomMargin" secondItem="78Q-KF-03r" secondAttribute="bottom" id="Hrf-2g-CbR"/>
<constraint firstItem="hYe-CA-pIg" firstAttribute="top" secondItem="7pv-bs-Dyl" secondAttribute="topMargin" id="LSP-bV-M6S"/>
<constraint firstItem="hYe-CA-pIg" firstAttribute="leading" secondItem="78Q-KF-03r" secondAttribute="trailing" constant="8" id="Yvo-SL-Qfs"/>
<constraint firstItem="bcl-TC-YQE" firstAttribute="leading" secondItem="hYe-CA-pIg" secondAttribute="trailing" constant="8" id="Zrh-F8-XJh"/>
<constraint firstItem="bcl-TC-YQE" firstAttribute="top" secondItem="7pv-bs-Dyl" secondAttribute="top" constant="8" id="jk9-Yk-Pqc"/>
<constraint firstItem="hYe-CA-pIg" firstAttribute="top" secondItem="7pv-bs-Dyl" secondAttribute="topMargin" id="k7B-q8-ggD"/>
<constraint firstItem="78Q-KF-03r" firstAttribute="leading" secondItem="7pv-bs-Dyl" secondAttribute="leadingMargin" constant="10" id="lxr-s7-yGF"/>
</constraints>
<variation key="default">
<mask key="constraints">
<exclude reference="Yvo-SL-Qfs"/>
<exclude reference="5JH-q4-Izf"/>
</mask>
</variation>
</tableViewCellContentView>
</tableViewCell>
</cells>
</tableViewSection>
</sections>
<connections>
<outlet property="dataSource" destination="reR-RM-vy9" id="fvb-fm-7MA"/>
<outlet property="delegate" destination="reR-RM-vy9" id="lMo-5g-XTU"/>
</connections>
</tableView>
<toolbarItems/>
<navigationItem key="navigationItem" id="4JE-zU-mwR">
<barButtonItem key="rightBarButtonItem" systemItem="save" id="i1d-Jq-pBj">
<connections>
<segue destination="zoU-ny-53v" kind="unwind" unwindAction="prepareForUnwind:" id="uXS-aM-Pu3"/>
</connections>
</barButtonItem>
</navigationItem>
<simulatedToolbarMetrics key="simulatedBottomBarMetrics"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/>
<connections>
<outlet property="deptTextField" destination="Ma6-Fz-ARd" id="PF0-Uv-Lf5"/>
<outlet property="emailTextField" destination="bcl-TC-YQE" id="LfD-CW-Ky2"/>
<outlet property="nameTextField" destination="RLO-iL-B6N" id="Jdy-TK-k87"/>
</connections>
</tableViewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="KbR-sz-dLl" userLabel="First Responder" sceneMemberID="firstResponder"/>
<exit id="zoU-ny-53v" userLabel="Exit" sceneMemberID="exit"/>
</objects>
<point key="canvasLocation" x="881" y="1147"/>
</scene>
<!--Navigation Controller-->
<scene sceneID="JRk-FH-e52">
<objects>
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="kge-42-FzN" sceneMemberID="viewController">
<toolbarItems/>
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina4"/>
<navigationBar key="navigationBar" contentMode="scaleToFill" id="bzD-ye-4zC">
<rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
<autoresizingMask key="autoresizingMask"/>
</navigationBar>
<nil name="viewControllers"/>
<connections>
<segue destination="bW2-S2-zYB" kind="relationship" relationship="rootViewController" id="2m6-Qi-faz"/>
</connections>
</navigationController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dW1-JZ-sht" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="434" y="450"/>
</scene>
</scenes>
<inferredMetricsTieBreakers>
<segue reference="2ki-SC-flz"/>
</inferredMetricsTieBreakers>
</document>

View File

@ -0,0 +1,28 @@
//
// EditAddTableViewController.h
// pg4
//
// Created by Sarah Head on 12/3/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface EditAddTableViewController : UITableViewController {
NSIndexPath *selectedIndexPath;
NSString *dbpath;
sqlite3 *db;
}
@property (weak, nonatomic) IBOutlet UITextField *nameTextField;
@property (weak, nonatomic) IBOutlet UITextField *deptTextField;
@property (strong, nonatomic) IBOutlet UITextField *emailTextField;
//- (IBAction) deleteButtonClicked:(id)sender;
- (void) setSelectedIndexPath:(NSIndexPath *)indexPath;
- (void) deleteProf;
- (void) setDBPath:(NSString *) db_path;
@end

View File

@ -0,0 +1,134 @@
//
// EditAddTableViewController.m
// pg4
//
// Created by Ben Harris on 12/3/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import "EditAddTableViewController.h"
#import <sqlite3.h>
@interface EditAddTableViewController ()
@end
@implementation EditAddTableViewController
@synthesize nameTextField;
@synthesize deptTextField;
@synthesize emailTextField;
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"Add/Edit"];
// if we are loading an existing professor
if (selectedIndexPath != nil) {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query = [NSString stringWithFormat:
@"select name, email, department\
from profs where prof_id =\
(select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
nameTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 0)];
emailTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 1)];
deptTextField.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 2)];
sqlite3_finalize(stmt);
sqlite3_close(db);
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash
target:self
action:@selector(deleteProf)];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void) setSelectedIndexPath:(NSIndexPath *)indexPath {
selectedIndexPath = indexPath;
}
- (void) setDBPath:(NSString *) db_path {
dbpath = db_path;
}
- (void) deleteProf {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query = [NSString stringWithFormat:
@"delete from profs where prof_id =\
(select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(db);
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// name is required!! don't do anything if the field is empty
if ([nameTextField.text isEqualToString:@""]) return;
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
}
NSString *query;
// if there is no selected cell
if (selectedIndexPath != nil) {
// update
query = [NSString stringWithFormat:
@"update profs set name = '%@', department = '%@', email = '%@'\
where prof_id = (select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
nameTextField.text, deptTextField.text, emailTextField.text,
(long)selectedIndexPath.section, (long)selectedIndexPath.row];
} else { // insert
query = [NSString stringWithFormat:@"insert into profs (name, department, email) values ('%@', '%@', '%@')",
nameTextField.text, deptTextField.text, emailTextField.text];
}
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(db);
}
@end

40
pg4/pg4/Info.plist Normal file
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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View File

@ -0,0 +1,18 @@
//
// ProfListTableViewController.h
// pg4
//
// Created by CS 344 Student on 12/1/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <sqlite3.h>
@interface ProfListTableViewController : UITableViewController {
NSString *dbpath;
sqlite3 *db;
NSIndexPath *selectedIndexPath;
}
@end

View File

@ -0,0 +1,193 @@
//
// ProfListTableViewController.m
// pg4
//
// Created by CS 344 Student on 12/1/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import "ProfListTableViewController.h"
#import "EditAddTableViewController.h"
#import <sqlite3.h>
@interface ProfListTableViewController ()
@end
@implementation ProfListTableViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setTitle:@"NMU Professors"];
// dbpath = [[NSBundle mainBundle] pathForResource:@"app" ofType:@"db"];
#warning needs absolute dbpath
dbpath = @"/Users/cs344student/benharri/pg4/app.db";
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
return 0;
}
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, "select count(distinct department) from profs", -1, &stmt, NULL);
sqlite3_step(stmt);
int num_sections = sqlite3_column_int(stmt, 0);
sqlite3_finalize(stmt);
sqlite3_close(db);
// NSLog(@"num_sections = %d", num_sections);
return num_sections;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
return 0;
}
sqlite3_stmt *stmt;
NSString *query = [NSString stringWithFormat:@"select distinct department from profs order by department limit 1 offset %ld", (long)section];
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
NSString *dept_title = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 0)];
sqlite3_finalize(stmt);
sqlite3_close(db);
return dept_title;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
return 0;
}
sqlite3_stmt *stmt;
NSString *query = [NSString stringWithFormat:@"select count (prof_id) from profs where department = (select distinct department from profs order by department limit 1 offset %ld)", (long)section];
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
int num_rows = sqlite3_column_int(stmt, 0);
sqlite3_finalize(stmt);
sqlite3_close(db);
return num_rows;
}
// get cell from index path
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"prof_cell" forIndexPath:indexPath];
// Configure the cell...
if ((sqlite3_open_v2([dbpath UTF8String], &db, SQLITE_OPEN_READWRITE, NULL)) != SQLITE_OK) {
NSLog(@"failed to open app.db");
return 0;
}
NSString *query = [NSString stringWithFormat:
@"select name from profs where prof_id =\
(select prof_id from profs where department = \
(select distinct department from profs order by department limit 1 offset %ld)\
order by name limit 1 offset %ld)",
(long)indexPath.section, (long)indexPath.row];
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db, [query UTF8String], -1, &stmt, NULL);
sqlite3_step(stmt);
cell.textLabel.text = [NSString stringWithUTF8String:(const char * _Nonnull)sqlite3_column_text(stmt, 0)];
sqlite3_finalize(stmt);
sqlite3_close(db);
return cell;
}
-(IBAction)prepareForUnwind:(UIStoryboardSegue *)segue {
[self.tableView reloadData];
}
- (void)viewDidAppear:(BOOL)animated {
[self.tableView reloadData];
}
#pragma mark - Navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
[(EditAddTableViewController *)[segue destinationViewController] setDBPath:dbpath];
if ([segue.identifier isEqualToString:@"showProf"]) {
[(EditAddTableViewController *)[segue destinationViewController] setSelectedIndexPath:[self.tableView indexPathForSelectedRow]];
}
}
// Override to support conditional editing of the table view.
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the specified item to be editable.
return YES;
}
/*
// Override to support editing the table view.
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
// Delete the row from the data source
[tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} else if (editingStyle == UITableViewCellEditingStyleInsert) {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
}
*/
/*
// Override to support conditional rearranging of the table view.
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
// Return NO if you do not want the item to be re-orderable.
return YES;
}
*/
@end

16
pg4/pg4/main.m Normal file
View File

@ -0,0 +1,16 @@
//
// main.m
// pg4
//
// Created by CS 344 Student on 12/1/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

1
pg5

@ -1 +0,0 @@
Subproject commit 3073cdc93e1148ebafa91c27452ce3c609f2ee22

View File

@ -0,0 +1,307 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
A444BE441DFB59770025797D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A444BE431DFB59770025797D /* main.m */; };
A444BE471DFB59770025797D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A444BE461DFB59770025797D /* AppDelegate.m */; };
A444BE4A1DFB59770025797D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A444BE491DFB59770025797D /* ViewController.m */; };
A444BE4D1DFB59770025797D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A444BE4B1DFB59770025797D /* Main.storyboard */; };
A444BE4F1DFB59770025797D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A444BE4E1DFB59770025797D /* Assets.xcassets */; };
A444BE521DFB59770025797D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A444BE501DFB59770025797D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
A444BE3F1DFB59770025797D /* programfive.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = programfive.app; sourceTree = BUILT_PRODUCTS_DIR; };
A444BE431DFB59770025797D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
A444BE451DFB59770025797D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
A444BE461DFB59770025797D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
A444BE481DFB59770025797D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
A444BE491DFB59770025797D /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
A444BE4C1DFB59770025797D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
A444BE4E1DFB59770025797D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
A444BE511DFB59770025797D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
A444BE531DFB59770025797D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
A444BE3C1DFB59770025797D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
A444BE361DFB59770025797D = {
isa = PBXGroup;
children = (
A444BE411DFB59770025797D /* programfive */,
A444BE401DFB59770025797D /* Products */,
);
sourceTree = "<group>";
};
A444BE401DFB59770025797D /* Products */ = {
isa = PBXGroup;
children = (
A444BE3F1DFB59770025797D /* programfive.app */,
);
name = Products;
sourceTree = "<group>";
};
A444BE411DFB59770025797D /* programfive */ = {
isa = PBXGroup;
children = (
A444BE451DFB59770025797D /* AppDelegate.h */,
A444BE461DFB59770025797D /* AppDelegate.m */,
A444BE481DFB59770025797D /* ViewController.h */,
A444BE491DFB59770025797D /* ViewController.m */,
A444BE4B1DFB59770025797D /* Main.storyboard */,
A444BE4E1DFB59770025797D /* Assets.xcassets */,
A444BE501DFB59770025797D /* LaunchScreen.storyboard */,
A444BE531DFB59770025797D /* Info.plist */,
A444BE421DFB59770025797D /* Supporting Files */,
);
path = programfive;
sourceTree = "<group>";
};
A444BE421DFB59770025797D /* Supporting Files */ = {
isa = PBXGroup;
children = (
A444BE431DFB59770025797D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
A444BE3E1DFB59770025797D /* programfive */ = {
isa = PBXNativeTarget;
buildConfigurationList = A444BE561DFB59770025797D /* Build configuration list for PBXNativeTarget "programfive" */;
buildPhases = (
A444BE3B1DFB59770025797D /* Sources */,
A444BE3C1DFB59770025797D /* Frameworks */,
A444BE3D1DFB59770025797D /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = programfive;
productName = programfive;
productReference = A444BE3F1DFB59770025797D /* programfive.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
A444BE371DFB59770025797D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0730;
ORGANIZATIONNAME = benharris;
TargetAttributes = {
A444BE3E1DFB59770025797D = {
CreatedOnToolsVersion = 7.3.1;
};
};
};
buildConfigurationList = A444BE3A1DFB59770025797D /* Build configuration list for PBXProject "programfive" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = A444BE361DFB59770025797D;
productRefGroup = A444BE401DFB59770025797D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
A444BE3E1DFB59770025797D /* programfive */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
A444BE3D1DFB59770025797D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A444BE521DFB59770025797D /* LaunchScreen.storyboard in Resources */,
A444BE4F1DFB59770025797D /* Assets.xcassets in Resources */,
A444BE4D1DFB59770025797D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
A444BE3B1DFB59770025797D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
A444BE4A1DFB59770025797D /* ViewController.m in Sources */,
A444BE471DFB59770025797D /* AppDelegate.m in Sources */,
A444BE441DFB59770025797D /* main.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
A444BE4B1DFB59770025797D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
A444BE4C1DFB59770025797D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
A444BE501DFB59770025797D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
A444BE511DFB59770025797D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
A444BE541DFB59770025797D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
};
name = Debug;
};
A444BE551DFB59770025797D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_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_INT_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
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 = 9.3;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
};
name = Release;
};
A444BE571DFB59770025797D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = programfive/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.programfive;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Debug;
};
A444BE581DFB59770025797D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
INFOPLIST_FILE = programfive/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = ch.benharris.programfive;
PRODUCT_NAME = "$(TARGET_NAME)";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
A444BE3A1DFB59770025797D /* Build configuration list for PBXProject "programfive" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A444BE541DFB59770025797D /* Debug */,
A444BE551DFB59770025797D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
A444BE561DFB59770025797D /* Build configuration list for PBXNativeTarget "programfive" */ = {
isa = XCConfigurationList;
buildConfigurations = (
A444BE571DFB59770025797D /* Debug */,
A444BE581DFB59770025797D /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = A444BE371DFB59770025797D /* Project object */;
}

View File

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

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "0730"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A444BE3E1DFB59770025797D"
BuildableName = "programfive.app"
BlueprintName = "programfive"
ReferencedContainer = "container:programfive.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A444BE3E1DFB59770025797D"
BuildableName = "programfive.app"
BlueprintName = "programfive"
ReferencedContainer = "container:programfive.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 = "A444BE3E1DFB59770025797D"
BuildableName = "programfive.app"
BlueprintName = "programfive"
ReferencedContainer = "container:programfive.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A444BE3E1DFB59770025797D"
BuildableName = "programfive.app"
BlueprintName = "programfive"
ReferencedContainer = "container:programfive.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

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>SchemeUserState</key>
<dict>
<key>programfive.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>A444BE3E1DFB59770025797D</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@ -0,0 +1,17 @@
//
// AppDelegate.h
// programfive
//
// Created by CS 344 Student on 12/9/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
@end

View File

@ -0,0 +1,45 @@
//
// AppDelegate.m
// programfive
//
// Created by CS 344 Student on 12/9/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
// 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 throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
// 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.
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 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.
}
- (void)applicationWillTerminate:(UIApplication *)application {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
@end

View File

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

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
<viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Reticulating Splines..." textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="d8j-H3-ABT">
<rect key="frame" x="218" y="289" width="164" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="jFM-nU-mJF">
<rect key="frame" x="290" y="318" width="20" height="20"/>
<subviews>
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" translatesAutoresizingMaskIntoConstraints="NO" id="kOC-KF-2Cz">
<rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
<subviews>
<activityIndicatorView opaque="NO" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" animating="YES" style="gray" translatesAutoresizingMaskIntoConstraints="NO" id="Aqq-4d-j2Y">
<rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
</activityIndicatorView>
</subviews>
</stackView>
</subviews>
</stackView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="d8j-H3-ABT" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="Ma4-XR-vjD"/>
<constraint firstItem="jFM-nU-mJF" firstAttribute="top" secondItem="d8j-H3-ABT" secondAttribute="bottom" constant="8" symbolic="YES" id="TGK-4c-V5R"/>
<constraint firstItem="d8j-H3-ABT" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="YN9-HT-68e"/>
<constraint firstItem="jFM-nU-mJF" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="jPS-Wo-Sjn"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15G1004" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

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>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>

View File

@ -0,0 +1,15 @@
//
// ViewController.h
// programfive
//
// Created by CS 344 Student on 12/9/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end

View File

@ -0,0 +1,22 @@
#import "ViewController.h" // ViewController.m pg5 Ben Harris
@interface ViewController () @end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIView *c = [[UIView alloc] initWithFrame:CGRectMake(arc4random_uniform(self.view.bounds.size.width - 100), arc4random_uniform(self.view.bounds.size.height - 100), 100, 100)];
[self.view addSubview:c];
CAShapeLayer *l = [CAShapeLayer layer];
[l setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 100, 100)] CGPath]];
[l setBackgroundColor:(__bridge CGColorRef _Nullable)([UIColor blackColor])];
[[c layer] addSublayer:l];
int cnt = 0, i = 0; CGPoint d = CGPointMake(100 * arc4random_uniform(2) == 1 ? 1 : -1, 100 * arc4random_uniform(2) == 1 ? 1 : -1);
while (cnt < 11) {
if (cnt > 11) break; i++;
[UIView animateWithDuration:0.01f delay:(i*0.01f) options:UIViewAnimationOptionCurveLinear animations:^(void){c.center = CGPointMake(c.center.x + d.x, c.center.y + d.y);} completion:nil];
if (c.center.x < 50 || c.center.x > (self.view.bounds.size.width - 50)) {d.x = -d.x; cnt++;}
if (c.center.y < 50 || c.center.y > (self.view.bounds.size.height - 50)) {d.y = -d.y; cnt++;}
}
}@end

16
pg5/programfive/main.m Normal file
View File

@ -0,0 +1,16 @@
//
// main.m
// programfive
//
// Created by CS 344 Student on 12/9/16.
// Copyright © 2016 benharris. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

1
pg6

@ -1 +0,0 @@
Subproject commit 4fd74c1e356455558f63fd84270fdaf80551bcdb

2
pg6/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

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