├── Podfile ├── PopulateTests ├── en.lproj │ └── InfoPlist.strings ├── PopulateTests-Info.plist └── PopulateTests.m ├── PopulateKitTests ├── en.lproj │ └── InfoPlist.strings ├── DataSet │ ├── Image │ │ ├── UIImage+pixelColor.h │ │ ├── UIImage+pixelColor.m │ │ └── ACImageSetTests.m │ ├── Name │ │ ├── NSString_RandomTests.m │ │ ├── NSCharacterSet_NSSetTest.m │ │ └── ACNameSetTests.m │ └── ACPersonSetTests.m ├── PopulateKitTests.m └── PopulateKitTests-Info.plist ├── Screenshots ├── screenshot01.png ├── screenshot02.png └── screenshot03.png ├── .travis.yml ├── PopulateKit ├── PopulateKit.bundle │ ├── male │ │ ├── 2426747542.jpg │ │ ├── 2684646829.jpg │ │ ├── 2685662308.jpg │ │ ├── 3029583295.jpg │ │ ├── 3049301404.jpg │ │ ├── 3509693081.jpg │ │ ├── 3583835468.jpg │ │ ├── 3785637152.jpg │ │ ├── 3805010216.jpg │ │ ├── 3808010112.jpg │ │ ├── 3878955960.jpg │ │ ├── 3901625460.jpg │ │ ├── 3901627356.jpg │ │ ├── 3969775958.jpg │ │ ├── 4058452222.jpg │ │ ├── 4078290109.jpg │ │ ├── 4102717125.jpg │ │ └── 4127819199.jpg │ ├── female │ │ ├── 2314659256.jpg │ │ ├── 2958855782.jpg │ │ ├── 3346862662.jpg │ │ ├── 3375281539.jpg │ │ ├── 3471134447.jpg │ │ ├── 3551787164.jpg │ │ ├── 3590481065.jpg │ │ ├── 3592946210.jpg │ │ ├── 3602236138.jpg │ │ ├── 3792057445.jpg │ │ ├── 3807195527.jpg │ │ ├── 3878956336.jpg │ │ ├── 3901628824.jpg │ │ ├── 4063801387.jpg │ │ ├── 4120172540.jpg │ │ ├── 4120172808.jpg │ │ ├── 4216283898.jpg │ │ └── 4254004811.jpg │ ├── common_surnames.csv │ ├── common_male_names.csv │ └── common_female_names.csv ├── PopulateKit-Prefix.pch ├── PopulateKit.h ├── DataSets │ ├── Image │ │ ├── UIImage+Random.h │ │ ├── ACIdenticonImageSet.m │ │ ├── ACRandomColorImageSet.m │ │ ├── ACRandomColorImageSet.h │ │ ├── ACIdenticonImageSet.h │ │ ├── ACMaleFaceImageSet.h │ │ ├── ACFemaleFaceImageSet.h │ │ ├── ACImageSet.h │ │ ├── ACMaleFaceImageSet.m │ │ ├── ACFemaleFaceImageSet.m │ │ ├── ACImageSet.m │ │ └── UIImage+Random.m │ ├── Name │ │ ├── NSCharacterSet+NSSet.h │ │ ├── ACRandomNameSet.m │ │ ├── NSString+Random.h │ │ ├── ACRandomNameSet.h │ │ ├── ACCommonMaleNameSet.h │ │ ├── ACCommonSurnameSet.h │ │ ├── ACCommonFemaleNameSet.h │ │ ├── NSCharacterSet+NSSet.m │ │ ├── ACNameSet.h │ │ ├── ACCommonSurnameSet.m │ │ ├── ACCommonMaleNameSet.m │ │ ├── ACCommonFemaleNameSet.m │ │ ├── NSString+Random.m │ │ ├── NSString+Randomized.h │ │ ├── ACNameSet.m │ │ └── NSString+Randomized.m │ ├── ACPersonSet.h │ └── ACPersonSet.m ├── Addressbook │ ├── ACAddressBook.h │ ├── ACPerson.h │ ├── ACAddressBook.m │ └── ACPerson.m ├── ACPopulate.h └── ACPopulate.m ├── Populate.xcworkspace └── contents.xcworkspacedata ├── Populate.xcodeproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── project.pbxproj ├── Populate ├── en.lproj │ └── InfoPlist.strings ├── ACAppDelegate.h ├── Populate-Prefix.pch ├── main.m ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── ACPopulateViewController.h ├── Populate-Info.plist ├── ACAppDelegate.m ├── ACPopulateViewController.m └── Base.lproj │ └── Main.storyboard ├── PopulateKit.podspec ├── LICENSE ├── FACES.md ├── .gitignore └── README.md /Podfile: -------------------------------------------------------------------------------- 1 | target "Populate" do 2 | pod 'IGIdenticon', '~> 0.1' 3 | end 4 | -------------------------------------------------------------------------------- /PopulateTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /PopulateKitTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Screenshots/screenshot01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/Screenshots/screenshot01.png -------------------------------------------------------------------------------- /Screenshots/screenshot02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/Screenshots/screenshot02.png -------------------------------------------------------------------------------- /Screenshots/screenshot03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/Screenshots/screenshot03.png -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | before_install: 3 | - gem install cocoapods --no-rdoc --no-ri --no-document --quiet 4 | -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/2426747542.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/2426747542.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/2684646829.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/2684646829.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/2685662308.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/2685662308.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3029583295.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3029583295.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3049301404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3049301404.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3509693081.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3509693081.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3583835468.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3583835468.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3785637152.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3785637152.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3805010216.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3805010216.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3808010112.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3808010112.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3878955960.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3878955960.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3901625460.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3901625460.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3901627356.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3901627356.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/3969775958.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/3969775958.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/4058452222.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/4058452222.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/4078290109.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/4078290109.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/4102717125.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/4102717125.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/male/4127819199.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/male/4127819199.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/2314659256.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/2314659256.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/2958855782.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/2958855782.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3346862662.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3346862662.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3375281539.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3375281539.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3471134447.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3471134447.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3551787164.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3551787164.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3590481065.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3590481065.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3592946210.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3592946210.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3602236138.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3602236138.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3792057445.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3792057445.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3807195527.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3807195527.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3878956336.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3878956336.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/3901628824.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/3901628824.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/4063801387.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/4063801387.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/4120172540.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/4120172540.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/4120172808.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/4120172808.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/4216283898.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/4216283898.jpg -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/female/4254004811.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/acoomans/Populate/HEAD/PopulateKit/PopulateKit.bundle/female/4254004811.jpg -------------------------------------------------------------------------------- /Populate.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Populate.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Populate/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | /* (No Commment) */ 4 | "NSContactsUsageDescription" = "Please allow access to contacts so that Populate app can populate Address Book with new contacts"; 5 | 6 | -------------------------------------------------------------------------------- /PopulateKit/PopulateKit-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #endif 10 | -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // PopulateKit.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACPopulate.h" 10 | #import "ACPerson.h" 11 | #import "ACPersonSet.h" 12 | 13 | #import "ACNameSet.h" 14 | #import "ACImageSet.h" 15 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Image/UIImage+pixelColor.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+pixelColor.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (pixelColor) 12 | - (UIColor*)colorAtPoint:(CGPoint)point; 13 | @end 14 | -------------------------------------------------------------------------------- /PopulateKitTests/PopulateKitTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // PopulateKitTests.m 3 | // PopulateKitTests 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PopulateKitTests : XCTestCase 12 | @end 13 | 14 | @implementation PopulateKitTests 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Populate/ACAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACAppDelegate.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ACAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/UIImage+Random.h: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Random.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface UIImage (Random) 12 | 13 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size; 14 | + (UIImage*)imageWithRandomColorOfSize:(CGSize)size; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Populate/Populate-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | #import 16 | #endif 17 | -------------------------------------------------------------------------------- /Populate/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "ACAppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([ACAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /PopulateKit/Addressbook/ACAddressBook.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACAddressBook.h 3 | // ACAddressBook 4 | // 5 | // Created by Arnaud Coomans on 25/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | ABRecordRef ABAddressBookGetCopyGroupWithName(ABAddressBookRef addressBookRef, CFStringRef groupName); 12 | 13 | ABRecordRef ABAddressBookCreateGroupWithName(ABAddressBookRef addressBookRef, CFStringRef groupName); -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSCharacterSet+NSSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSCharacterSet+NSSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSCharacterSet (NSSet) 12 | 13 | //Note: has to be a class method because NSCharacter is a class cluster 14 | + (NSSet*)setFromCharacterSet:(NSCharacterSet*)characterSet; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /Populate/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACRandomNameSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACRandomNameSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACRandomNameSet.h" 10 | #import "NSString+Random.h" 11 | 12 | @implementation ACRandomNameSet 13 | 14 | - (NSString*)randomName { 15 | return [NSString randomString]; 16 | } 17 | 18 | - (NSInteger)count { 19 | return INT_MAX; 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSString+Random.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Random.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSString (Random) 12 | 13 | + (instancetype)randomString; 14 | + (instancetype)randomStringWithCharacterSet:(NSCharacterSet*)characterSet; 15 | + (instancetype)randomStringWithCharacterSet:(NSCharacterSet*)characterSet length:(NSUInteger)len; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACRandomNameSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACRandomNameSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACNameSet.h" 10 | 11 | 12 | /** ACRandomNameSet is a set of random string of length 8 characters. 13 | */ 14 | 15 | @interface ACRandomNameSet : ACNameSet 16 | 17 | /** Returns a random name. 18 | */ 19 | - (NSString*)randomName; 20 | 21 | /** Number of names in the set. 22 | */ 23 | - (NSInteger)count; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACIdenticonImageSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACIdenticonImageSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #ifdef IGIDENTICON_AVAILABLE 10 | 11 | #import "ACIdenticonImageSet.h" 12 | #import 13 | 14 | @implementation ACIdenticonImageSet 15 | 16 | - (UIImage*)randomImage { 17 | return [IGIdenticon identiconWithUInt32:arc4random() size:150]; 18 | } 19 | 20 | - (NSInteger)count { 21 | return INT_MAX; 22 | } 23 | 24 | @end 25 | 26 | #endif -------------------------------------------------------------------------------- /Populate/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACRandomColorImageSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACRandomColorImageSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACRandomColorImageSet.h" 10 | #import "UIImage+Random.h" 11 | 12 | @implementation ACRandomColorImageSet 13 | 14 | - (UIImage*)randomImage { 15 | return [self randomImageWithSize:CGSizeMake(150, 150)]; 16 | } 17 | 18 | - (UIImage*)randomImageWithSize:(CGSize)size { 19 | return [UIImage imageWithRandomColorOfSize:size]; 20 | } 21 | 22 | - (NSInteger)count { 23 | return INT_MAX; 24 | } 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /PopulateKit.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'PopulateKit' 3 | s.version = '0.0.4' 4 | s.platform = :ios 5 | s.license = { :type => 'MIT', :file => 'LICENSE' } 6 | s.summary = 'Randomly-generated contacts for the iOS address book' 7 | s.homepage = 'https://github.com/acoomans/Populate' 8 | s.author = { 'Arnaud Coomans' => 'arnaud.coomans@gmail.com' } 9 | s.source = { :git => 'https://github.com/acoomans/Populate.git', :tag => '0.0.4' } 10 | s.source_files = 'PopulateKit/**/*.{h,m}' 11 | s.resource_bundle = { 'PopulateKit' => 'PopulateKit/PopulateKit.bundle/*' } 12 | s.dependency 'IGIdenticon', '~> 0.1' 13 | s.frameworks = 'UIKit', 'AddressBook' 14 | s.xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' } 15 | s.requires_arc = true 16 | end -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonMaleNameSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACCommonMaleNameSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACNameSet.h" 10 | 11 | /** ACCommonMaleNameSet is a set containing the 200 most common names for males in the United States of America between 2000 - 2009. The list comes from Top names of the 2000s [Social Security Administration](http://www.ssa.gov/OACT/babynames/decades/names2000s.html). 12 | */ 13 | 14 | @interface ACCommonMaleNameSet : ACNameSet 15 | 16 | /** Returns one common male name chosen at random. 17 | */ 18 | - (NSString*)randomName; 19 | 20 | /** Number of names in the set. 21 | */ 22 | - (NSInteger)count; 23 | 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonSurnameSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACCommonSurnameSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACNameSet.h" 10 | 11 | /** ACCommonSurnameSet is a set containing the 100 most common surnames in the United States of America in the year 2000. The list comes from the List of most common surnames in North America on [Wikipedia]( http://en.wikipedia.org/wiki/List_of_most_common_surnames_in_North_America ). 12 | */ 13 | 14 | @interface ACCommonSurnameSet : ACNameSet 15 | 16 | /** Returns one common surname chosen at random. 17 | */ 18 | - (NSString*)randomName; 19 | 20 | /** Number of names in the set. 21 | */ 22 | - (NSInteger)count; 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonFemaleNameSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACCommonFemaleNameSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACNameSet.h" 10 | 11 | /** ACCommonFemaleNameSet is a set containing the 200 most common names for females in the United States of America between 2000 - 2009. The list comes from Top names of the 2000s [Social Security Administration](http://www.ssa.gov/OACT/babynames/decades/names2000s.html). 12 | */ 13 | 14 | @interface ACCommonFemaleNameSet : ACNameSet 15 | 16 | /** Returns one common female name chosen at random. 17 | */ 18 | - (NSString*)randomName; 19 | 20 | /** Number of names in the set. 21 | */ 22 | - (NSInteger)count; 23 | 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACRandomColorImageSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACRandomColorImageSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACImageSet.h" 10 | 11 | 12 | /** ACRandomColorImageSet is a set of one-color images. 13 | */ 14 | 15 | @interface ACRandomColorImageSet : ACImageSet 16 | 17 | /** Returns a random image. 18 | * @param size The size of the image. 19 | * @return a one randomly-chosen color image. 20 | */ 21 | - (UIImage*)randomImageWithSize:(CGSize)size; 22 | 23 | /** Returns a random image. 24 | * @return a one randomly-chosen color image. 25 | */ 26 | - (UIImage*)randomImage; 27 | 28 | /** Number of images in the set. 29 | */ 30 | - (NSInteger)count; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PopulateTests/PopulateTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.acoomans.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /PopulateKitTests/PopulateKitTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.acoomans.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /PopulateTests/PopulateTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // PopulateTests.m 3 | // PopulateTests 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface PopulateTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation PopulateTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACIdenticonImageSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACIdenticonImageSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACImageSet.h" 10 | 11 | #if defined(__has_include) 12 | #if __has_include("IGIdenticon.h") && __has_include() 13 | #define IGIDENTICON_AVAILABLE 1 14 | #endif 15 | #endif 16 | 17 | 18 | #ifdef IGIDENTICON_AVAILABLE 19 | 20 | /** ACIdenticonImageSet is a set of [identicon](https://en.wikipedia.org/wiki/Identicon) images. 21 | */ 22 | 23 | @interface ACIdenticonImageSet : ACImageSet 24 | 25 | /** Returns a random image. 26 | * @return An identicon. 27 | */ 28 | - (UIImage*)randomImage; 29 | 30 | /** Number of images in the set. 31 | */ 32 | - (NSInteger)count; 33 | 34 | @end 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSCharacterSet+NSSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSCharacterSet+NSSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "NSCharacterSet+NSSet.h" 10 | 11 | #define UNICHAR_MAX (1ull << (CHAR_BIT * sizeof(unichar))) - 1 12 | 13 | 14 | @implementation NSCharacterSet (NSSet) 15 | 16 | + (NSSet*)setFromCharacterSet:(NSCharacterSet*)characterSet { 17 | 18 | NSData *data = [characterSet bitmapRepresentation]; 19 | uint8_t *ptr = (uint8_t *)[data bytes]; 20 | NSMutableSet *set = [NSMutableSet set]; 21 | // following from Apple's sample code 22 | for (unichar i = 0; i < UNICHAR_MAX; i++) { 23 | if (ptr[i >> 3] & (1u << (i & 7))) { 24 | [set addObject:[NSString stringWithCharacters:&i length:1]]; 25 | } 26 | } 27 | return set; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACMaleFaceImageSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACMaleFaceImageSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACImageSet.h" 10 | 11 | /** ACMaleFaceImageSet is a set of photos of male faces from from Greg Peverill-Conti ([@gregpc](https://twitter.com/gregpc))'s [1000 faces sets on Flickr](http://www.flickr.com/photos/gregpc). 12 | * 13 | * All images are under Creative Commons license: [Attribution-NonCommercial-ShareAlike 2.0 Generic (CC BY-NC-SA 2.0)](http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en) 14 | * 15 | * See the FACES.md file for complete credits. 16 | */ 17 | 18 | @interface ACMaleFaceImageSet : ACImageSet 19 | 20 | /** Returns a face. 21 | * @return An photo of a male face. 22 | */ 23 | - (UIImage*)randomImage; 24 | 25 | /** Number of images in the set. 26 | */ 27 | - (NSInteger)count; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACFemaleFaceImageSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACFemaleFaceImageSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACImageSet.h" 10 | 11 | /** ACFemaleFaceImageSet is a set of photos of female faces from from Greg Peverill-Conti ([@gregpc](https://twitter.com/gregpc))'s [1000 faces sets on Flickr](http://www.flickr.com/photos/gregpc). 12 | * 13 | * All images are under Creative Commons license: [Attribution-NonCommercial-ShareAlike 2.0 Generic (CC BY-NC-SA 2.0)](http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en) 14 | * 15 | * See the FACES.md file for complete credits. 16 | */ 17 | 18 | @interface ACFemaleFaceImageSet : ACImageSet 19 | 20 | /** Returns a face. 21 | * @return An photo of a female face. 22 | */ 23 | - (UIImage*)randomImage; 24 | 25 | /** Number of images in the set. 26 | */ 27 | - (NSInteger)count; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Name/NSString_RandomTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString_RandomTests.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "NSString+Random.h" 11 | 12 | @interface NSString_RandomTests : XCTestCase 13 | @end 14 | 15 | @implementation NSString_RandomTests 16 | 17 | - (void)testRandomStringWithCharacterSetAndLength { 18 | NSString *string = [NSString randomStringWithCharacterSet:[NSCharacterSet lowercaseLetterCharacterSet] length:12]; 19 | XCTAssertTrue(string.length == 12); 20 | for (int i = 0; i < string.length-1; i++) { 21 | unichar a = [string characterAtIndex:i]; 22 | unichar b = [string characterAtIndex:i+1]; 23 | if (a != b) { 24 | return; 25 | } else if (i == string.length-2) { 26 | XCTFail(); 27 | } 28 | } 29 | 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /Populate/ACPopulateViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACPopulateViewController.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ACPopulateViewController : UIViewController 13 | 14 | @property (nonatomic, weak) IBOutlet UITextField *groupNameTextField; 15 | 16 | @property (nonatomic, weak) IBOutlet UITextField *countOfPersonsTextField; 17 | @property (nonatomic, weak) IBOutlet UIStepper *countOfPersonsStepper; 18 | 19 | @property (nonatomic, weak) IBOutlet UISegmentedControl *nameSegmentedControl; 20 | @property (nonatomic, weak) IBOutlet UISegmentedControl *imageSegmentedControl; 21 | 22 | @property (nonatomic, weak) IBOutlet UIButton *populateButton; 23 | @property (nonatomic, weak) IBOutlet UIButton *depopulateButton; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Name/NSCharacterSet_NSSetTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSCharacterSet_NSSetTest.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import "NSCharacterSet+NSSet.h" 12 | 13 | @interface NSCharacterSet_NSSetTest : XCTestCase 14 | @end 15 | 16 | @implementation NSCharacterSet_NSSetTest 17 | 18 | - (void)testLowercaseCharacterSet { 19 | NSCharacterSet *charSet = [NSCharacterSet lowercaseLetterCharacterSet]; 20 | NSSet *set = [NSCharacterSet setFromCharacterSet:charSet]; 21 | XCTAssertTrue([set count] >= 26); 22 | //NSLog(@"%@", set); 23 | } 24 | 25 | - (void)testExemplarCharacterSet { 26 | NSCharacterSet *charSet = [[NSLocale currentLocale] objectForKey:NSLocaleExemplarCharacterSet]; 27 | NSSet *set = [NSCharacterSet setFromCharacterSet:charSet]; 28 | XCTAssertTrue([set count] > 0); 29 | //NSLog(@"%@", set); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Image/UIImage+pixelColor.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+pixelColor.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "UIImage+pixelColor.h" 10 | 11 | @implementation UIImage (pixelColor) 12 | 13 | - (UIColor*)colorAtPoint:(CGPoint)point { 14 | 15 | CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(self.CGImage)); 16 | const UInt8* data = CFDataGetBytePtr(pixelData); 17 | 18 | int pixelInfo = ((self.size.width * point.y) + point.x ) * 4; // The image is png 19 | 20 | UInt8 red = data[pixelInfo]; 21 | UInt8 green = data[pixelInfo + 1]; 22 | UInt8 blue = data[pixelInfo + 2]; 23 | UInt8 alpha = data[pixelInfo + 3]; 24 | CFRelease(pixelData); 25 | 26 | return [UIColor colorWithRed:red/255.0f 27 | green:green/255.0f 28 | blue:blue/255.0f 29 | alpha:alpha/255.0f]; 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 Arnaud Coomans 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACNameSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACNameSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | /** A set of names for persons. 12 | * 13 | * This is an abstract class and a class cluster. Do not use it directly but call one of class methods like randomNameSet to get a subclass. 14 | */ 15 | 16 | @interface ACNameSet : NSObject 17 | 18 | /** A set of random names. 19 | */ 20 | + (instancetype)randomNameSet; 21 | 22 | /** A set of common surnames. 23 | */ 24 | + (instancetype)commonSurnameSet; 25 | 26 | /** A set of common male names. 27 | */ 28 | + (instancetype)commonMaleNameSet; 29 | 30 | /** A set of common female names. 31 | */ 32 | + (instancetype)commonFemaleNameSet; 33 | 34 | 35 | /** Returns a random name. 36 | * @discussion the default implementation returns nil. 37 | */ 38 | - (NSString*)randomName; 39 | 40 | /** Number of names in the set 41 | * @discussion the default implementation returns 0. 42 | */ 43 | - (NSInteger)count; 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACImageSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACImageSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | /** A set of images to represent persons. 13 | * 14 | * This is an abstract class and a class cluster. Do not use it directly but call one of class methods like randomColorImageSet to get a subclass. 15 | */ 16 | 17 | @interface ACImageSet : NSObject 18 | 19 | /** A set of random images. 20 | */ 21 | + (instancetype)randomColorImageSet; 22 | 23 | #ifdef IGIDENTICON_AVAILABLE 24 | /** A set of identicon. 25 | */ 26 | + (instancetype)identiconImageSet; 27 | #endif 28 | 29 | /** A set of male faces. 30 | */ 31 | + (instancetype)maleFaceImageSet; 32 | 33 | /** A set of female faces. 34 | */ 35 | + (instancetype)femaleFaceImageSet; 36 | 37 | /** Returns a random image 38 | * @discussion the default implementation returns nil. 39 | */ 40 | - (UIImage*)randomImage; 41 | 42 | /** Number of images in the set 43 | * @discussion the default implementation returns 0. 44 | */ 45 | - (NSInteger)count; 46 | 47 | @end 48 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonSurnameSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPopularSurnameSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACCommonSurnameSet.h" 10 | 11 | static NSString * const ACCommonSurnameSetResourceName = @"PopulateKit.bundle/common_surnames"; 12 | 13 | @interface ACCommonSurnameSet () 14 | - (NSArray*)names; 15 | @end 16 | 17 | @implementation ACCommonSurnameSet 18 | 19 | - (NSArray*)names { 20 | static NSArray *_names = nil; 21 | 22 | static dispatch_once_t onceToken; 23 | dispatch_once(&onceToken, ^{ 24 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 25 | NSString* fileRoot = [bundle pathForResource:ACCommonSurnameSetResourceName ofType:@"csv"]; 26 | NSString* fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil]; 27 | _names = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 28 | }); 29 | return _names; 30 | } 31 | 32 | - (NSString*)randomName { 33 | return self.names[arc4random_uniform(self.names.count)]; 34 | } 35 | 36 | - (NSInteger)count { 37 | return [self.names count]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/common_surnames.csv: -------------------------------------------------------------------------------- 1 | Smith 2 | Johnson 3 | Williams 4 | Brown 5 | Jones 6 | Miller 7 | Davis 8 | García 9 | Rodríguez 10 | Wilson 11 | Martínez 12 | Anderson 13 | Taylor 14 | Thomas 15 | Hernández 16 | Moore 17 | Martin 18 | Jackson 19 | Thompson 20 | White 21 | López 22 | Lee 23 | González 24 | Harris 25 | Clark 26 | Lewis 27 | Robinson 28 | Walker 29 | Pérez 30 | Hall 31 | Young 32 | Allen 33 | Sánchez 34 | Wright 35 | King 36 | Scott 37 | Green 38 | Baker 39 | Adams 40 | Nelson 41 | Hill 42 | Ramírez 43 | Campbell 44 | Mitchell 45 | Roberts 46 | Carter 47 | Phillips 48 | Evans 49 | Turner 50 | Torres 51 | Parker 52 | Collins 53 | Edwards 54 | Stewart 55 | Flores 56 | Morris 57 | Nguyen 58 | Murphy 59 | Rivera 60 | Cook 61 | Rogers 62 | Morgan 63 | Peterson 64 | Cooper 65 | Reed 66 | Bailey 67 | Bell 68 | Gómez 69 | Kelly 70 | Howard 71 | Ward 72 | Cox 73 | Díaz 74 | Richardson 75 | Wood 76 | Watson 77 | Brooks 78 | Bennett 79 | Gray 80 | James 81 | Reyes 82 | Cruz 83 | Hughes 84 | Price 85 | Myers 86 | Long 87 | Foster 88 | Sanders 89 | Ross 90 | Morales 91 | Powell 92 | Sullivan 93 | Russell 94 | Ortiz 95 | Jenkins 96 | Gutiérrez 97 | Perry 98 | Butler 99 | Barnes 100 | Fisher -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonMaleNameSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACCommonMaleNameSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACCommonMaleNameSet.h" 10 | 11 | static NSString * const ACCommonMaleNameSetResourceName = @"PopulateKit.bundle/common_male_names"; 12 | 13 | @interface ACCommonMaleNameSet () 14 | - (NSArray*)names; 15 | @end 16 | 17 | 18 | @implementation ACCommonMaleNameSet 19 | 20 | - (NSArray*)names { 21 | static NSArray *_names = nil; 22 | 23 | 24 | static dispatch_once_t onceToken; 25 | dispatch_once(&onceToken, ^{ 26 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 27 | NSString* fileRoot = [bundle pathForResource:ACCommonMaleNameSetResourceName ofType:@"csv"]; 28 | NSString* fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil]; 29 | _names = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 30 | }); 31 | return _names; 32 | } 33 | 34 | - (NSString*)randomName { 35 | return self.names[arc4random_uniform(self.names.count)]; 36 | } 37 | 38 | - (NSInteger)count { 39 | return [self.names count]; 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACCommonFemaleNameSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACCommonFemaleNameSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACCommonFemaleNameSet.h" 10 | 11 | static NSString * const ACCommonFemaleNameSetResourceName = @"PopulateKit.bundle/common_female_names"; 12 | 13 | @interface ACCommonFemaleNameSet () 14 | - (NSArray*)names; 15 | @end 16 | 17 | 18 | @implementation ACCommonFemaleNameSet 19 | 20 | - (NSArray*)names { 21 | static NSArray *_names = nil; 22 | 23 | static dispatch_once_t onceToken; 24 | dispatch_once(&onceToken, ^{ 25 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 26 | NSString* fileRoot = [bundle pathForResource:ACCommonFemaleNameSetResourceName ofType:@"csv"]; 27 | NSString* fileContents = [NSString stringWithContentsOfFile:fileRoot encoding:NSUTF8StringEncoding error:nil]; 28 | _names = [fileContents componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 29 | }); 30 | return _names; 31 | } 32 | 33 | - (NSString*)randomName { 34 | return self.names[arc4random_uniform(self.names.count)]; 35 | } 36 | 37 | - (NSInteger)count { 38 | return [self.names count]; 39 | } 40 | 41 | @end 42 | -------------------------------------------------------------------------------- /PopulateKit/Addressbook/ACPerson.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACPerson.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 25/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | #import 12 | 13 | 14 | /** ACPerson is an Objective-C wrapper for AddressBook's ABPerson. 15 | */ 16 | 17 | @interface ACPerson : NSObject 18 | 19 | /** @name Properties */ 20 | 21 | /** First name 22 | */ 23 | @property (nonatomic, copy) NSString *firstName; 24 | 25 | /** Last name 26 | */ 27 | @property (nonatomic, copy) NSString *lastName; 28 | 29 | /** Home email address 30 | */ 31 | @property (nonatomic, copy) NSString *email; 32 | 33 | /** Home phone number 34 | */ 35 | @property (nonatomic, copy) NSString *phone; 36 | 37 | /** Image 38 | */ 39 | @property (nonatomic, strong) UIImage *image; 40 | 41 | 42 | /** Designated initializer 43 | */ 44 | - (instancetype)initWithFirstname:(NSString*)firstName 45 | lastName:(NSString*)lastName 46 | email:(NSString*)email 47 | phone:(NSString*)phone 48 | image:(UIImage*)image; 49 | 50 | @end 51 | 52 | ABRecordRef ABPersonCreateFromPerson(ACPerson *person); 53 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACMaleFaceImageSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACMaleFaceImageSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACMaleFaceImageSet.h" 10 | 11 | 12 | @interface ACMaleFaceImageSet () 13 | - (NSArray*)files; 14 | @end 15 | 16 | @implementation ACMaleFaceImageSet 17 | 18 | - (NSArray*)files { 19 | static NSArray *_files = nil; 20 | static dispatch_once_t onceToken; 21 | dispatch_once(&onceToken, ^{ 22 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 23 | NSString *directory = [[bundle pathForResource:@"PopulateKit" ofType:@"bundle"] stringByAppendingPathComponent:@"male"]; 24 | _files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil]; 25 | }); 26 | return _files; 27 | } 28 | 29 | - (UIImage*)randomImage { 30 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 31 | NSString *directory = [[bundle pathForResource:@"PopulateKit" ofType:@"bundle"] stringByAppendingPathComponent:@"male"]; 32 | NSString *file = [directory stringByAppendingPathComponent:self.files[arc4random_uniform(self.files.count)]]; 33 | return [UIImage imageWithContentsOfFile:file]; 34 | } 35 | 36 | - (NSInteger)count { 37 | return [self.files count]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACFemaleFaceImageSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACFemaleFaceImageSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 28/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACFemaleFaceImageSet.h" 10 | 11 | @interface ACFemaleFaceImageSet () 12 | - (NSArray*)files; 13 | @end 14 | 15 | @implementation ACFemaleFaceImageSet 16 | 17 | - (NSArray*)files { 18 | static NSArray *_files = nil; 19 | static dispatch_once_t onceToken; 20 | dispatch_once(&onceToken, ^{ 21 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 22 | NSString *directory = [[bundle pathForResource:@"PopulateKit" ofType:@"bundle"] stringByAppendingPathComponent:@"female"]; 23 | _files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:directory error:nil]; 24 | }); 25 | return _files; 26 | } 27 | 28 | - (UIImage*)randomImage { 29 | NSBundle *bundle = [NSBundle bundleForClass:[self class]]; 30 | NSString *directory = [[bundle pathForResource:@"PopulateKit" ofType:@"bundle"] stringByAppendingPathComponent:@"female"]; 31 | NSString *file = [directory stringByAppendingPathComponent:self.files[arc4random_uniform(self.files.count)]]; 32 | return [UIImage imageWithContentsOfFile:file]; 33 | } 34 | 35 | - (NSInteger)count { 36 | return [self.files count]; 37 | } 38 | 39 | @end 40 | -------------------------------------------------------------------------------- /Populate/Populate-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | com.acoomans.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/ACPersonSet.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACPersonSet.h 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "ACNameSet.h" 12 | #import "ACImageSet.h" 13 | #import "ACPerson.h" 14 | 15 | 16 | /** A set of ACPerson. 17 | */ 18 | 19 | @interface ACPersonSet : NSObject 20 | 21 | /** A set of ACPerson where the name and the image are generated randomly. 22 | */ 23 | + (instancetype)personSetWithRandomNameAndImage; 24 | 25 | /** A set of ACPerson. 26 | * @param firstnameSet A set of names. 27 | * @param lastnameSet A set of names. 28 | * @param imageSet A set of images. 29 | */ 30 | + (instancetype)setWithFirstNameSet:(ACNameSet*)firstnameSet 31 | lastNameSet:(ACNameSet*)lastnameSet 32 | imageSet:(ACImageSet*)imageSet; 33 | 34 | /** A set of ACPerson. 35 | * @discussion Designated initializer. 36 | * @param firstnameSet A set of names. 37 | * @param lastnameSet A set of names. 38 | * @param imageSet A set of images. 39 | */ 40 | - (instancetype)initWithFirstNameSet:(ACNameSet*)firstnameSet 41 | lastNameSet:(ACNameSet*)lastnameSet 42 | imageSet:(ACImageSet*)imageSet; 43 | 44 | /** Returns a random ACPerson. 45 | */ 46 | - (ACPerson*)randomPerson; 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /PopulateKit/Addressbook/ACAddressBook.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACAddressBook.m 3 | // ACAddressBook 4 | // 5 | // Created by Arnaud Coomans on 25/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACAddressBook.h" 10 | 11 | 12 | ABRecordRef ABAddressBookGetCopyGroupWithName(ABAddressBookRef addressBookRef, CFStringRef groupName) { 13 | ABRecordRef resultRef = NULL; 14 | 15 | CFArrayRef groupsRef = ABAddressBookCopyArrayOfAllGroups(addressBookRef); 16 | for (CFIndex i = 0; i < CFArrayGetCount(groupsRef); i++) { 17 | ABRecordRef groupRef = CFArrayGetValueAtIndex(groupsRef, i); 18 | CFStringRef name = ABRecordCopyValue(groupRef, kABGroupNameProperty); 19 | if (CFStringCompare(name, groupName, 0) == kCFCompareEqualTo) { 20 | resultRef = CFRetain(groupRef); 21 | CFRelease(name); 22 | break; 23 | } 24 | CFRelease(name); 25 | } 26 | CFRelease(groupsRef); 27 | 28 | return resultRef; 29 | } 30 | 31 | ABRecordRef ABAddressBookCreateGroupWithName(ABAddressBookRef addressBookRef, CFStringRef groupName) { 32 | CFErrorRef error = NULL; 33 | ABRecordRef groupRef = ABGroupCreate(); 34 | ABRecordSetValue(groupRef, kABGroupNameProperty, groupName, &error); 35 | ABAddressBookAddRecord(addressBookRef, groupRef, &error); 36 | ABAddressBookSave(addressBookRef, &error); 37 | return groupRef; 38 | } -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSString+Random.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Random.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | // reimplementation of NSString+Randomized but with NSCharacterSet instead of "Alphabet" 10 | 11 | #import "NSString+Random.h" 12 | #import "NSCharacterSet+NSSet.h" 13 | 14 | #define kNSStringRandomizedDefaultLength 8 15 | 16 | @implementation NSString (Random) 17 | 18 | + (instancetype)randomString { 19 | NSCharacterSet *characterSet = [[NSLocale currentLocale] objectForKey:NSLocaleExemplarCharacterSet]; 20 | return [self randomStringWithCharacterSet:characterSet]; 21 | } 22 | 23 | + (instancetype)randomStringWithCharacterSet:(NSCharacterSet*)characterSet { 24 | return [self randomStringWithCharacterSet:characterSet length:kNSStringRandomizedDefaultLength]; 25 | } 26 | 27 | + (instancetype)randomStringWithCharacterSet:(NSCharacterSet*)characterSet length:(NSUInteger)len { 28 | 29 | NSArray *characters = [[NSCharacterSet setFromCharacterSet:characterSet] allObjects]; 30 | 31 | NSMutableString *string = [NSMutableString stringWithCapacity:len]; 32 | for (NSUInteger i = 0; i < len; i++) { 33 | u_int32_t r = arc4random_uniform([characters count]); 34 | NSString *s = characters[r]; 35 | [string appendFormat:@"%@", s]; 36 | } 37 | return [NSString stringWithString:string]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSString+Randomized.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Michael Dippery 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #import 24 | 25 | @interface NSString (Randomized) 26 | 27 | + (NSString *)defaultAlphabet; 28 | + (id)randomizedString; 29 | + (id)randomizedStringWithAlphabet:(NSString *)alphabet; 30 | + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/ACNameSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACNameSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACNameSet.h" 10 | #import "ACRandomNameSet.h" 11 | #import "ACCommonSurnameSet.h" 12 | #import "ACCommonMaleNameSet.h" 13 | #import "ACCommonFemaleNameSet.h" 14 | 15 | @implementation ACNameSet 16 | 17 | + (instancetype)randomNameSet { 18 | static ACRandomNameSet *_set = nil; 19 | static dispatch_once_t onceToken; 20 | dispatch_once(&onceToken, ^{ 21 | _set = [[ACRandomNameSet alloc] init]; 22 | }); 23 | return _set; 24 | } 25 | 26 | + (instancetype)commonSurnameSet { 27 | static ACCommonSurnameSet *_set = nil; 28 | static dispatch_once_t onceToken; 29 | dispatch_once(&onceToken, ^{ 30 | _set = [[ACCommonSurnameSet alloc] init]; 31 | }); 32 | return _set; 33 | } 34 | 35 | + (instancetype)commonMaleNameSet { 36 | static ACCommonMaleNameSet *_set = nil; 37 | static dispatch_once_t onceToken; 38 | dispatch_once(&onceToken, ^{ 39 | _set = [[ACCommonMaleNameSet alloc] init]; 40 | }); 41 | return _set; 42 | } 43 | 44 | + (instancetype)commonFemaleNameSet { 45 | static ACCommonFemaleNameSet *_set = nil; 46 | static dispatch_once_t onceToken; 47 | dispatch_once(&onceToken, ^{ 48 | _set = [[ACCommonFemaleNameSet alloc] init]; 49 | }); 50 | return _set; 51 | } 52 | 53 | 54 | - (NSString*)randomName { 55 | return nil; 56 | } 57 | 58 | - (NSInteger)count { 59 | return 0; 60 | } 61 | 62 | @end 63 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/ACImageSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACImageSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACImageSet.h" 10 | #import "ACRandomColorImageSet.h" 11 | #ifdef IGIDENTICON_AVAILABLE 12 | #import "ACIdenticonImageSet.h" 13 | #endif 14 | #import "ACMaleFaceImageSet.h" 15 | #import "ACFemaleFaceImageSet.h" 16 | 17 | @implementation ACImageSet 18 | 19 | + (instancetype)randomColorImageSet { 20 | static ACRandomColorImageSet *_set = nil; 21 | static dispatch_once_t onceToken; 22 | dispatch_once(&onceToken, ^{ 23 | _set = [[ACRandomColorImageSet alloc] init]; 24 | }); 25 | return _set; 26 | } 27 | 28 | #ifdef IGIDENTICON_AVAILABLE 29 | + (instancetype)identiconImageSet { 30 | static ACIdenticonImageSet *_set = nil; 31 | static dispatch_once_t onceToken; 32 | dispatch_once(&onceToken, ^{ 33 | _set = [[ACIdenticonImageSet alloc] init]; 34 | }); 35 | return _set; 36 | } 37 | #endif 38 | 39 | + (instancetype)maleFaceImageSet { 40 | static ACMaleFaceImageSet *_set = nil; 41 | static dispatch_once_t onceToken; 42 | dispatch_once(&onceToken, ^{ 43 | _set = [[ACMaleFaceImageSet alloc] init]; 44 | }); 45 | return _set; 46 | } 47 | 48 | + (instancetype)femaleFaceImageSet { 49 | static ACFemaleFaceImageSet *_set = nil; 50 | static dispatch_once_t onceToken; 51 | dispatch_once(&onceToken, ^{ 52 | _set = [[ACFemaleFaceImageSet alloc] init]; 53 | }); 54 | return _set; 55 | } 56 | 57 | - (UIImage*)randomImage { 58 | return nil; 59 | } 60 | 61 | - (NSInteger)count { 62 | return 0; 63 | } 64 | 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Image/ACImageSetTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACImageSetTests.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | #import "UIImage+pixelColor.h" 13 | #import "ACImageSet.h" 14 | 15 | @interface ACImageSetTests : XCTestCase 16 | @end 17 | 18 | @implementation ACImageSetTests 19 | 20 | #pragma mark - ACRandomColorImageSet 21 | 22 | - (void)testRandomColorImageSet { 23 | UIImage *image = [[ACImageSet randomColorImageSet] randomImage]; 24 | XCTAssertTrue(image.size.width > 0); 25 | XCTAssertTrue(image.size.height > 0); 26 | 27 | UIColor *color = [image colorAtPoint:CGPointMake(image.size.width/2, image.size.height/2)]; 28 | CGFloat red, green, blue; 29 | XCTAssertTrue([color getRed:&red green:&green blue:&blue alpha:NULL]); 30 | XCTAssertTrue(red > 0 || green > 0 || blue > 0); 31 | XCTAssertTrue(red < 1 || green < 1 || blue < 1); 32 | } 33 | 34 | #pragma mark - ACIdenticonImageSet 35 | 36 | - (void)testIdenticonImageSet { 37 | UIImage *image = [[ACImageSet identiconImageSet] randomImage]; 38 | XCTAssertTrue(image.size.width > 0); 39 | XCTAssertTrue(image.size.height > 0); 40 | } 41 | 42 | #pragma mark - ACMaleFaceImageSet 43 | 44 | - (void)testMaleFaceImageSet { 45 | UIImage *image = [[ACImageSet maleFaceImageSet] randomImage]; 46 | XCTAssertTrue(image.size.width > 0); 47 | XCTAssertTrue(image.size.height > 0); 48 | } 49 | 50 | #pragma mark - ACFemaleFaceImageSet 51 | 52 | - (void)testFemaleFaceImageSet { 53 | UIImage *image = [[ACImageSet femaleFaceImageSet] randomImage]; 54 | XCTAssertTrue(image.size.width > 0); 55 | XCTAssertTrue(image.size.height > 0); 56 | } 57 | 58 | @end 59 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/ACPersonSetTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPersonSetTests.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "ACPersonSet.h" 12 | #import "ACNameSet.h" 13 | #import "ACImageSet.h" 14 | 15 | @interface ACPersonSetTests : XCTestCase 16 | @end 17 | 18 | @implementation ACPersonSetTests 19 | 20 | - (void)testRandomContact { 21 | ACPersonSet *personSet = [[ACPersonSet alloc] initWithFirstNameSet:[ACNameSet randomNameSet] 22 | lastNameSet:[ACNameSet randomNameSet] 23 | imageSet:[ACImageSet randomColorImageSet]]; 24 | 25 | ACPerson *person = [personSet randomPerson]; 26 | XCTAssertTrue(person.firstName.length > 0); 27 | XCTAssertTrue(person.lastName.length > 0); 28 | XCTAssertTrue(person.email.length > 0 && [person.email rangeOfString:@"@"].location != NSNotFound); 29 | XCTAssertTrue(person.phone.length > 0); 30 | XCTAssertTrue(person.image.size.width > 0 && person.image.size.height > 0); 31 | } 32 | 33 | - (void)testRandomContact2 { 34 | ACPersonSet *personSet = [ACPersonSet setWithFirstNameSet:[ACNameSet randomNameSet] 35 | lastNameSet:[ACNameSet randomNameSet] 36 | imageSet:[ACImageSet randomColorImageSet]]; 37 | 38 | ACPerson *person = [personSet randomPerson]; 39 | XCTAssertTrue(person.firstName.length > 0); 40 | XCTAssertTrue(person.lastName.length > 0); 41 | XCTAssertTrue(person.email.length > 0 && [person.email rangeOfString:@"@"].location != NSNotFound); 42 | XCTAssertTrue(person.phone.length > 0); 43 | XCTAssertTrue(person.image.size.width > 0 && person.image.size.height > 0); 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Image/UIImage+Random.m: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Random.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "UIImage+Random.h" 10 | 11 | @implementation UIImage (Random) 12 | 13 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size { 14 | 15 | size_t bitsPerComponent = 8; 16 | size_t bytesPerPixel = 4; 17 | size_t bytesPerRow = (size.width * bitsPerComponent * bytesPerPixel + 7) / 8; 18 | size_t dataSize = bytesPerRow * size.height; 19 | 20 | CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 21 | 22 | int *data = malloc(dataSize); 23 | memset(data, 0, dataSize); 24 | 25 | CGContextRef contextRef = CGBitmapContextCreate(data, 26 | size.width, 27 | size.height, 28 | bitsPerComponent, 29 | bytesPerRow, colorSpaceRef, 30 | kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big); 31 | 32 | CGContextSetFillColorWithColor(contextRef, color.CGColor); 33 | 34 | CGContextFillRect(contextRef, 35 | CGRectMake( 36 | 0, 37 | 0, 38 | size.width, 39 | size.height)); 40 | 41 | CGColorSpaceRelease(colorSpaceRef); 42 | CGImageRef imageRef = CGBitmapContextCreateImage(contextRef); 43 | UIImage *image = [UIImage imageWithCGImage:imageRef]; 44 | CGImageRelease(imageRef); 45 | CGContextRelease(contextRef); 46 | free(data); 47 | 48 | return image; 49 | } 50 | 51 | + (UIImage*)imageWithRandomColorOfSize:(CGSize)size { 52 | UIColor *randomColor = [UIColor colorWithRed:drand48() green:drand48() blue:drand48() alpha:1.0]; 53 | return [self imageWithColor:randomColor size:size]; 54 | } 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /PopulateKit/DataSets/Name/NSString+Randomized.m: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2011 Michael Dippery 3 | * 4 | * Permission is hereby granted, free of charge, to any person obtaining a copy 5 | * of this software and associated documentation files (the "Software"), to deal 6 | * in the Software without restriction, including without limitation the rights 7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | * copies of the Software, and to permit persons to whom the Software is 9 | * furnished to do so, subject to the following conditions: 10 | * 11 | * The above copyright notice and this permission notice shall be included in 12 | * all copies or substantial portions of the Software. 13 | * 14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 | * THE SOFTWARE. 21 | */ 22 | 23 | #import "NSString+Random.h" 24 | #include 25 | 26 | #define kNSStringRandomizedDefaultLenght 8 27 | 28 | @implementation NSString (Randomized) 29 | 30 | + (NSString *)defaultAlphabet { 31 | // objectForKey:NSLocaleExemplarCharacterSet on a NSLocale 32 | return @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 33 | } 34 | 35 | + (id)randomizedString { 36 | return [self randomizedStringWithAlphabet:[self defaultAlphabet]]; 37 | } 38 | 39 | + (id)randomizedStringWithAlphabet:(NSString *)alphabet { 40 | return [self randomizedStringWithAlphabet:alphabet length:kNSStringRandomizedDefaultLenght]; 41 | } 42 | 43 | + (id)randomizedStringWithAlphabet:(NSString *)alphabet length:(NSUInteger)len { 44 | NSMutableString *s = [NSMutableString stringWithCapacity:len]; 45 | for (NSUInteger i = 0U; i < len; i++) { 46 | u_int32_t r = arc4random() % [alphabet length]; 47 | unichar c = [alphabet characterAtIndex:r]; 48 | [s appendFormat:@"%C", c]; 49 | } 50 | return [NSString stringWithString:s]; 51 | } 52 | 53 | 54 | @end -------------------------------------------------------------------------------- /PopulateKit/Addressbook/ACPerson.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPerson.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 25/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACPerson.h" 10 | 11 | 12 | ABRecordRef ABRecordCreateFromPerson(ACPerson *person); 13 | 14 | @implementation ACPerson 15 | 16 | - (instancetype)initWithFirstname:(NSString*)firstName 17 | lastName:(NSString*)lastName 18 | email:(NSString*)email 19 | phone:(NSString*)phone 20 | image:(UIImage*)image { 21 | self = [super init]; 22 | if (self) { 23 | _firstName = firstName; 24 | _lastName = lastName; 25 | _email = email; 26 | _phone = phone; 27 | _image = image; 28 | } 29 | return self; 30 | } 31 | 32 | ABRecordRef ABPersonCreateFromPerson(ACPerson *person) { 33 | 34 | ABRecordRef recordRef = ABPersonCreate(); 35 | 36 | ABRecordSetValue(recordRef, kABPersonFirstNameProperty, (__bridge CFTypeRef)(person.firstName), NULL); 37 | ABRecordSetValue(recordRef, kABPersonLastNameProperty, (__bridge CFTypeRef)(person.lastName), NULL); 38 | 39 | ABMutableMultiValueRef emailsMultiValueRef = ABMultiValueCreateMutable(kABStringPropertyType); 40 | ABMultiValueAddValueAndLabel(emailsMultiValueRef, (__bridge CFTypeRef)(person.email), kABHomeLabel, NULL); 41 | ABRecordSetValue(recordRef, kABPersonEmailProperty, emailsMultiValueRef, NULL); 42 | CFRelease(emailsMultiValueRef); 43 | 44 | ABMutableMultiValueRef phonesMultiValueRef = ABMultiValueCreateMutable(kABStringPropertyType); 45 | ABMultiValueAddValueAndLabel(phonesMultiValueRef, (__bridge CFTypeRef)(person.phone), kABHomeLabel, NULL); 46 | ABRecordSetValue(recordRef, kABPersonPhoneProperty, phonesMultiValueRef, NULL); 47 | CFRelease(phonesMultiValueRef); 48 | 49 | NSData *data = UIImagePNGRepresentation(person.image); 50 | CFDataRef dataRef = CFDataCreate(NULL, [data bytes], [data length]); 51 | ABPersonSetImageData (recordRef, dataRef, nil); 52 | CFRelease(dataRef); 53 | 54 | return recordRef; 55 | } 56 | 57 | - (NSString*)description { 58 | return [NSString stringWithFormat:@"%@ %@ %@", [super description], self.firstName, self.lastName]; 59 | } 60 | 61 | @end 62 | -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/common_male_names.csv: -------------------------------------------------------------------------------- 1 | Jacob 2 | Michael 3 | Joshua 4 | Matthew 5 | Daniel 6 | Christopher 7 | Andrew 8 | Ethan 9 | Joseph 10 | William 11 | Anthony 12 | David 13 | Alexander 14 | Nicholas 15 | Ryan 16 | Tyler 17 | James 18 | John 19 | Jonathan 20 | Noah 21 | Brandon 22 | Christian 23 | Dylan 24 | Samuel 25 | Benjamin 26 | Nathan 27 | Zachary 28 | Logan 29 | Justin 30 | Gabriel 31 | Jose 32 | Austin 33 | Kevin 34 | Elijah 35 | Caleb 36 | Robert 37 | Thomas 38 | Jordan 39 | Cameron 40 | Jack 41 | Hunter 42 | Jackson 43 | Angel 44 | Isaiah 45 | Evan 46 | Isaac 47 | Mason 48 | Luke 49 | Jason 50 | Jayden 51 | Gavin 52 | Aaron 53 | Connor 54 | Aiden 55 | Aidan 56 | Kyle 57 | Juan 58 | Charles 59 | Luis 60 | Adam 61 | Lucas 62 | Brian 63 | Eric 64 | Adrian 65 | Nathaniel 66 | Sean 67 | Alex 68 | Carlos 69 | Ian 70 | Bryan 71 | Owen 72 | Jesus 73 | Landon 74 | Julian 75 | Chase 76 | Cole 77 | Diego 78 | Jeremiah 79 | Steven 80 | Sebastian 81 | Xavier 82 | Timothy 83 | Carter 84 | Wyatt 85 | Brayden 86 | Blake 87 | Hayden 88 | Devin 89 | Cody 90 | Richard 91 | Seth 92 | Dominic 93 | Jaden 94 | Antonio 95 | Miguel 96 | Liam 97 | Patrick 98 | Carson 99 | Jesse 100 | Tristan 101 | Alejandro 102 | Henry 103 | Victor 104 | Trevor 105 | Bryce 106 | Jake 107 | Riley 108 | Colin 109 | Jared 110 | Jeremy 111 | Mark 112 | Caden 113 | Garrett 114 | Parker 115 | Marcus 116 | Vincent 117 | Kaleb 118 | Kaden 119 | Brady 120 | Colton 121 | Kenneth 122 | Joel 123 | Oscar 124 | Josiah 125 | Jorge 126 | Cooper 127 | Ashton 128 | Tanner 129 | Eduardo 130 | Paul 131 | Edward 132 | Ivan 133 | Preston 134 | Maxwell 135 | Alan 136 | Levi 137 | Stephen 138 | Grant 139 | Nicolas 140 | Omar 141 | Dakota 142 | Alexis 143 | George 144 | Collin 145 | Eli 146 | Spencer 147 | Gage 148 | Max 149 | Cristian 150 | Ricardo 151 | Derek 152 | Micah 153 | Brody 154 | Francisco 155 | Nolan 156 | Ayden 157 | Dalton 158 | Shane 159 | Peter 160 | Damian 161 | Jeffrey 162 | Brendan 163 | Travis 164 | Fernando 165 | Peyton 166 | Conner 167 | Andres 168 | Javier 169 | Giovanni 170 | Shawn 171 | Braden 172 | Jonah 173 | Bradley 174 | Cesar 175 | Emmanuel 176 | Manuel 177 | Edgar 178 | Mario 179 | Erik 180 | Edwin 181 | Johnathan 182 | Devon 183 | Erick 184 | Wesley 185 | Oliver 186 | Trenton 187 | Hector 188 | Malachi 189 | Jalen 190 | Raymond 191 | Gregory 192 | Abraham 193 | Elias 194 | Leonardo 195 | Sergio 196 | Donovan 197 | Colby 198 | Marco 199 | Bryson 200 | Martin -------------------------------------------------------------------------------- /PopulateKit/PopulateKit.bundle/common_female_names.csv: -------------------------------------------------------------------------------- 1 | Emily 2 | Madison 3 | Emma 4 | Olivia 5 | Hannah 6 | Abigail 7 | Isabella 8 | Samantha 9 | Elizabeth 10 | Ashley 11 | Alexis 12 | Sarah 13 | Sophia 14 | Alyssa 15 | Grace 16 | Ava 17 | Taylor 18 | Brianna 19 | Lauren 20 | Chloe 21 | Natalie 22 | Kayla 23 | Jessica 24 | Anna 25 | Victoria 26 | Mia 27 | Hailey 28 | Sydney 29 | Jasmine 30 | Julia 31 | Morgan 32 | Destiny 33 | Rachel 34 | Ella 35 | Kaitlyn 36 | Megan 37 | Katherine 38 | Savannah 39 | Jennifer 40 | Alexandra 41 | Allison 42 | Haley 43 | Maria 44 | Kaylee 45 | Lily 46 | Makayla 47 | Brooke 48 | Mackenzie 49 | Nicole 50 | Addison 51 | Stephanie 52 | Lillian 53 | Andrea 54 | Zoe 55 | Faith 56 | Kimberly 57 | Madeline 58 | Alexa 59 | Katelyn 60 | Gabriella 61 | Gabrielle 62 | Trinity 63 | Amanda 64 | Kylie 65 | Mary 66 | Paige 67 | Riley 68 | Leah 69 | Jenna 70 | Sara 71 | Rebecca 72 | Michelle 73 | Sofia 74 | Vanessa 75 | Jordan 76 | Angelina 77 | Caroline 78 | Avery 79 | Audrey 80 | Evelyn 81 | Maya 82 | Claire 83 | Autumn 84 | Jocelyn 85 | Ariana 86 | Nevaeh 87 | Arianna 88 | Jada 89 | Bailey 90 | Brooklyn 91 | Aaliyah 92 | Amber 93 | Isabel 94 | Mariah 95 | Danielle 96 | Melanie 97 | Sierra 98 | Erin 99 | Molly 100 | Amelia 101 | Isabelle 102 | Madelyn 103 | Melissa 104 | Jacqueline 105 | Marissa 106 | Shelby 107 | Angela 108 | Leslie 109 | Katie 110 | Jade 111 | Catherine 112 | Diana 113 | Aubrey 114 | Mya 115 | Amy 116 | Briana 117 | Sophie 118 | Gabriela 119 | Breanna 120 | Gianna 121 | Kennedy 122 | Gracie 123 | Peyton 124 | Adriana 125 | Christina 126 | Courtney 127 | Daniela 128 | Lydia 129 | Kathryn 130 | Valeria 131 | Layla 132 | Alexandria 133 | Natalia 134 | Angel 135 | Laura 136 | Charlotte 137 | Margaret 138 | Cheyenne 139 | Mikayla 140 | Miranda 141 | Naomi 142 | Kelsey 143 | Payton 144 | Ana 145 | Alicia 146 | Jillian 147 | Daisy 148 | Mckenzie 149 | Ashlyn 150 | Sabrina 151 | Caitlin 152 | Summer 153 | Ruby 154 | Rylee 155 | Valerie 156 | Skylar 157 | Lindsey 158 | Kelly 159 | Genesis 160 | Zoey 161 | Eva 162 | Sadie 163 | Alexia 164 | Cassidy 165 | Kylee 166 | Kendall 167 | Jordyn 168 | Kate 169 | Jayla 170 | Karen 171 | Tiffany 172 | Cassandra 173 | Juliana 174 | Reagan 175 | Caitlyn 176 | Giselle 177 | Serenity 178 | Alondra 179 | Lucy 180 | Bianca 181 | Kiara 182 | Crystal 183 | Erica 184 | Angelica 185 | Hope 186 | Chelsea 187 | Alana 188 | Liliana 189 | Brittany 190 | Camila 191 | Makenzie 192 | Lilly 193 | Veronica 194 | Abby 195 | Jazmin 196 | Adrianna 197 | Delaney 198 | Karina 199 | Ellie 200 | Jasmin -------------------------------------------------------------------------------- /PopulateKit/DataSets/ACPersonSet.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPersonSet.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACPersonSet.h" 10 | 11 | 12 | @interface ACPersonSet () 13 | @property (nonatomic, strong) ACNameSet *firstNameSet; 14 | @property (nonatomic, strong) ACNameSet *lastNameSet; 15 | @property (nonatomic, strong) ACImageSet *imageSet; 16 | @property (nonatomic, strong) NSString *emailDomain; 17 | @property (nonatomic, strong) NSString *phonePrefix; 18 | @end 19 | 20 | @implementation ACPersonSet 21 | 22 | + (instancetype)personSetWithRandomNameAndImage { 23 | return [[self.class alloc] initWithFirstNameSet:[ACNameSet randomNameSet] 24 | lastNameSet:[ACNameSet randomNameSet] 25 | imageSet:[ACImageSet randomColorImageSet]]; 26 | } 27 | 28 | + (instancetype)setWithFirstNameSet:(ACNameSet*)firstnameSet 29 | lastNameSet:(ACNameSet*)lastnameSet 30 | imageSet:(ACImageSet*)imageSet { 31 | return [[self.class alloc] initWithFirstNameSet:firstnameSet 32 | lastNameSet:lastnameSet 33 | imageSet:imageSet]; 34 | } 35 | 36 | - (instancetype)initWithFirstNameSet:(ACNameSet*)firstnameSet 37 | lastNameSet:(ACNameSet*)lastnameSet 38 | imageSet:(ACImageSet*)imageSet { 39 | self = [super init]; 40 | if (self) { 41 | _firstNameSet = firstnameSet; 42 | _lastNameSet = lastnameSet; 43 | _imageSet = imageSet; 44 | _emailDomain = @"example.com"; 45 | _phonePrefix = @"1555"; 46 | } 47 | return self; 48 | } 49 | 50 | - (id)init { 51 | return [self initWithFirstNameSet:nil 52 | lastNameSet:nil 53 | imageSet:nil]; 54 | } 55 | 56 | - (ACPerson*)randomPerson { 57 | NSString *firstName = [self.firstNameSet randomName]; 58 | NSString *lastName = [self.lastNameSet randomName]; 59 | 60 | return [[ACPerson alloc] initWithFirstname:firstName 61 | lastName:lastName 62 | email:[NSString stringWithFormat:@"%@.%@@%@", firstName, lastName, self.emailDomain] 63 | phone:[NSString stringWithFormat:@"%@%03d", self.phonePrefix, arc4random_uniform(9999999)] 64 | image:[self.imageSet randomImage]]; 65 | } 66 | 67 | @end 68 | -------------------------------------------------------------------------------- /PopulateKitTests/DataSet/Name/ACNameSetTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACNameSetTests.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 26/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ACNameSet.h" 11 | 12 | @interface ACNameSetTests : XCTestCase 13 | @end 14 | 15 | @implementation ACNameSetTests 16 | 17 | 18 | #pragma mark - ACRandomNameSet 19 | 20 | - (void)testRandomNameSet { 21 | NSString *name = [[ACNameSet randomNameSet] randomName]; 22 | XCTAssertTrue([name length] > 0); 23 | NSLog(@"%@", name); 24 | } 25 | 26 | - (void)testDifferentRandomNameSet { 27 | NSString *a = [[ACNameSet randomNameSet] randomName]; 28 | NSString *b = [[ACNameSet randomNameSet] randomName]; 29 | XCTAssertFalse([a isEqualToString:b]); 30 | NSLog(@"a = %@", a); 31 | NSLog(@"b = %@", b); 32 | } 33 | 34 | #pragma mark - ACCommonSurnameSet 35 | 36 | - (void)testCommonSurnameSet { 37 | NSString *name = [[ACNameSet commonSurnameSet] randomName]; 38 | XCTAssertTrue([name length] > 0); 39 | NSLog(@"%@", name); 40 | } 41 | 42 | - (void)testCommonSurnameSetCount { 43 | XCTAssertTrue([[ACNameSet commonSurnameSet] count] > 0); 44 | } 45 | 46 | - (void)testDifferentCommonSurnameSet { 47 | NSString *a = [[ACNameSet commonSurnameSet] randomName]; 48 | NSString *b = [[ACNameSet commonSurnameSet] randomName]; 49 | XCTAssertFalse([a isEqualToString:b]); 50 | NSLog(@"a = %@", a); 51 | NSLog(@"b = %@", b); 52 | } 53 | 54 | #pragma mark - ACCommonMaleSet 55 | 56 | - (void)testCommonMaleNameSet { 57 | NSString *name = [[ACNameSet commonMaleNameSet] randomName]; 58 | XCTAssertTrue([name length] > 0); 59 | NSLog(@"%@", name); 60 | } 61 | 62 | - (void)testCommonMaleNameSetCount { 63 | XCTAssertTrue([[ACNameSet commonMaleNameSet] count] > 0); 64 | } 65 | 66 | - (void)testDifferentCommonMaleNameSet { 67 | NSString *a = [[ACNameSet commonMaleNameSet] randomName]; 68 | NSString *b = [[ACNameSet commonMaleNameSet] randomName]; 69 | XCTAssertFalse([a isEqualToString:b]); 70 | NSLog(@"a = %@", a); 71 | NSLog(@"b = %@", b); 72 | } 73 | 74 | #pragma mark - ACCommonFemaleSet 75 | 76 | - (void)testCommonFemaleNameSet { 77 | NSString *name = [[ACNameSet commonFemaleNameSet] randomName]; 78 | XCTAssertTrue([name length] > 0); 79 | NSLog(@"%@", name); 80 | } 81 | 82 | - (void)testCommonFemaleNameSetCount { 83 | XCTAssertTrue([[ACNameSet commonFemaleNameSet] count] > 0); 84 | } 85 | 86 | - (void)testDifferentCommonFemaleNameSet { 87 | NSString *a = [[ACNameSet commonFemaleNameSet] randomName]; 88 | NSString *b = [[ACNameSet commonFemaleNameSet] randomName]; 89 | XCTAssertFalse([a isEqualToString:b]); 90 | NSLog(@"a = %@", a); 91 | NSLog(@"b = %@", b); 92 | } 93 | 94 | 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /FACES.md: -------------------------------------------------------------------------------- 1 | # Faces photos 2 | 3 | ## Credits 4 | 5 | All images comes from Greg Peverill-Conti ([@gregpc](https://twitter.com/gregpc))'s [1000 faces sets on Flickr](http://www.flickr.com/photos/gregpc) 6 | 7 | Here are the URLs of the originals photos: 8 | 9 | * http://www.flickr.com/photos/gregpc/3551787164/in/set-72157606694597353 10 | * http://www.flickr.com/photos/gregpc/3049301404/in/set-72157606694597353 11 | * http://www.flickr.com/photos/gregpc/3029583295/in/set-72157606694597353 12 | * http://www.flickr.com/photos/gregpc/2958855782/in/set-72157606694597353 13 | * http://www.flickr.com/photos/gregpc/2685662308/in/set-72157606694597353 14 | * http://www.flickr.com/photos/gregpc/2684646829/in/set-72157606694597353 15 | * http://www.flickr.com/photos/gregpc/2426747542/in/set-72157606694597353 16 | * http://www.flickr.com/photos/gregpc/2314659256/in/set-72157606694597353 17 | * http://www.flickr.com/photos/gregpc/3509693081/in/set-72157606694597353 18 | * http://www.flickr.com/photos/gregpc/3471134447/in/set-72157606694597353 19 | * http://www.flickr.com/photos/gregpc/3375281539/in/set-72157606694597353 20 | * http://www.flickr.com/photos/gregpc/3346862662/in/set-72157606694597353 21 | * http://www.flickr.com/photos/gregpc/4254004811/in/set-72157618933151578 22 | * http://www.flickr.com/photos/gregpc/4216283898/in/set-72157618933151578 23 | * http://www.flickr.com/photos/gregpc/4127819199/in/set-72157618933151578 24 | * http://www.flickr.com/photos/gregpc/4120172808/in/set-72157618933151578 25 | * http://www.flickr.com/photos/gregpc/4120172540/in/set-72157618933151578 26 | * http://www.flickr.com/photos/gregpc/4102717125/in/set-72157618933151578 27 | * http://www.flickr.com/photos/gregpc/4078290109/in/set-72157618933151578 28 | * http://www.flickr.com/photos/gregpc/4063801387/in/set-72157618933151578 29 | * http://www.flickr.com/photos/gregpc/4058452222/in/set-72157618933151578 30 | * http://www.flickr.com/photos/gregpc/3969775958/in/set-72157618933151578 31 | * http://www.flickr.com/photos/gregpc/3901628824/in/set-72157618933151578 32 | * http://www.flickr.com/photos/gregpc/3901627356/in/set-72157618933151578 33 | * http://www.flickr.com/photos/gregpc/3901625460/in/set-72157618933151578 34 | * http://www.flickr.com/photos/gregpc/3878956336/in/set-72157618933151578 35 | * http://www.flickr.com/photos/gregpc/3878955960/in/set-72157618933151578 36 | * http://www.flickr.com/photos/gregpc/3807195527/in/set-72157618933151578 37 | * http://www.flickr.com/photos/gregpc/3808010112/in/set-72157618933151578 38 | * http://www.flickr.com/photos/gregpc/3805010216/in/set-72157618933151578 39 | * http://www.flickr.com/photos/gregpc/3792057445/in/set-72157618933151578 40 | * http://www.flickr.com/photos/gregpc/3785637152/in/set-72157618933151578 41 | * http://www.flickr.com/photos/gregpc/3602236138/in/set-72157618933151578 42 | * http://www.flickr.com/photos/gregpc/3590481065/in/set-72157618933151578 43 | * http://www.flickr.com/photos/gregpc/3592946210/in/set-72157618933151578 44 | * http://www.flickr.com/photos/gregpc/3583835468/in/set-72157618933151578 45 | 46 | ## Changes 47 | 48 | All images were modified in the following ways: 49 | 50 | * images were resized to 150x150 format 51 | * colours levels were automatically adjusted 52 | 53 | ## License 54 | 55 | All images are under Creative Commons license: [Attribution-NonCommercial-ShareAlike 2.0 Generic (CC BY-NC-SA 2.0)](http://creativecommons.org/licenses/by-nc-sa/2.0/deed.en) 56 | -------------------------------------------------------------------------------- /Populate/ACAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACAppDelegate.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACAppDelegate.h" 10 | 11 | #import "PopulateKit.h" 12 | 13 | @implementation ACAppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | // Override point for customization after application launch. 18 | 19 | /* 20 | ACPerson *personA = [[ACPerson alloc] initWithFirstname:@"Alice" 21 | lastName:@"A" 22 | email:@"alice@example.com" 23 | phone:@"555-111-1111" 24 | image:nil]; 25 | ACPerson *personB = [[ACPerson alloc] initWithFirstname:@"Bob" 26 | lastName:@"B" 27 | email:@"bob@example.com" 28 | phone:@"555-222-2222" 29 | image:nil]; 30 | ACPerson *personC = [[ACPerson alloc] initWithFirstname:@"Charlie" 31 | lastName:@"C" 32 | email:@"charles@example.com" 33 | phone:@"555-333-3333" 34 | image:nil]; 35 | 36 | 37 | [ACPopulate populateGroupWithName:@"Test" withPersons:@[personA, personB, personC] completion:nil]; 38 | 39 | [ACPopulate depopulateGroupWithName:@"Test" completion:nil]; 40 | 41 | [ACPopulate populateGroupWithName:@"Test" withCountOfPersons:10 fromSet:[ACPersonSet personSetWithRandomNameAndImage] completion:nil]; 42 | */ 43 | 44 | 45 | return YES; 46 | } 47 | 48 | - (void)applicationWillResignActive:(UIApplication *)application 49 | { 50 | // 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. 51 | // 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. 52 | } 53 | 54 | - (void)applicationDidEnterBackground:(UIApplication *)application 55 | { 56 | // 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. 57 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 58 | } 59 | 60 | - (void)applicationWillEnterForeground:(UIApplication *)application 61 | { 62 | // 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. 63 | } 64 | 65 | - (void)applicationDidBecomeActive:(UIApplication *)application 66 | { 67 | // 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. 68 | } 69 | 70 | - (void)applicationWillTerminate:(UIApplication *)application 71 | { 72 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 73 | } 74 | 75 | @end 76 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ######################### 2 | # .gitignore file for Xcode4 / OS X Source projects 3 | # 4 | # Version 2.0 5 | # For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects 6 | # 7 | # 2013 updates: 8 | # - fixed the broken "save personal Schemes" 9 | # 10 | # NB: if you are storing "built" products, this WILL NOT WORK, 11 | # and you should use a different .gitignore (or none at all) 12 | # This file is for SOURCE projects, where there are many extra 13 | # files that we want to exclude 14 | # 15 | ######################### 16 | 17 | ##### 18 | # OS X temporary files that should never be committed 19 | 20 | .DS_Store 21 | *.swp 22 | *.lock 23 | profile 24 | 25 | 26 | #### 27 | # Xcode temporary files that should never be committed 28 | # 29 | # NB: NIB/XIB files still exist even on Storyboard projects, so we want this... 30 | 31 | *~.nib 32 | 33 | 34 | #### 35 | # Xcode build files - 36 | # 37 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData" 38 | 39 | DerivedData/ 40 | 41 | # NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build" 42 | 43 | build/ 44 | 45 | 46 | ##### 47 | # Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups) 48 | # 49 | # This is complicated: 50 | # 51 | # SOMETIMES you need to put this file in version control. 52 | # Apple designed it poorly - if you use "custom executables", they are 53 | # saved in this file. 54 | # 99% of projects do NOT use those, so they do NOT want to version control this file. 55 | # ..but if you're in the 1%, comment out the line "*.pbxuser" 56 | 57 | *.pbxuser 58 | *.mode1v3 59 | *.mode2v3 60 | *.perspectivev3 61 | # NB: also, whitelist the default ones, some projects need to use these 62 | !default.pbxuser 63 | !default.mode1v3 64 | !default.mode2v3 65 | !default.perspectivev3 66 | 67 | 68 | #### 69 | # Xcode 4 - semi-personal settings 70 | # 71 | # 72 | # OPTION 1: --------------------------------- 73 | # throw away ALL personal settings (including custom schemes! 74 | # - unless they are "shared") 75 | # 76 | # NB: this is exclusive with OPTION 2 below 77 | xcuserdata 78 | 79 | # OPTION 2: --------------------------------- 80 | # get rid of ALL personal settings, but KEEP SOME OF THEM 81 | # - NB: you must manually uncomment the bits you want to keep 82 | # 83 | # NB: this is exclusive with OPTION 1 above 84 | # 85 | #xcuserdata/**/* 86 | 87 | # (requires option 2 above): Personal Schemes 88 | # 89 | #!xcuserdata/**/xcschemes/* 90 | 91 | #### 92 | # XCode 4 workspaces - more detailed 93 | # 94 | # Workspaces are important! They are a core feature of Xcode - don't exclude them :) 95 | # 96 | # Workspace layout is quite spammy. For reference: 97 | # 98 | # /(root)/ 99 | # /(project-name).xcodeproj/ 100 | # project.pbxproj 101 | # /project.xcworkspace/ 102 | # contents.xcworkspacedata 103 | # /xcuserdata/ 104 | # /(your name)/xcuserdatad/ 105 | # UserInterfaceState.xcuserstate 106 | # /xcsshareddata/ 107 | # /xcschemes/ 108 | # (shared scheme name).xcscheme 109 | # /xcuserdata/ 110 | # /(your name)/xcuserdatad/ 111 | # (private scheme).xcscheme 112 | # xcschememanagement.plist 113 | # 114 | # 115 | 116 | #### 117 | # Xcode 4 - Deprecated classes 118 | # 119 | # Allegedly, if you manually "deprecate" your classes, they get moved here. 120 | # 121 | # We're using source-control, so this is a "feature" that we do not want! 122 | 123 | *.moved-aside 124 | 125 | 126 | #### 127 | # UNKNOWN: recommended by others, but I can't discover what these files are 128 | # 129 | # ...none. Everything is now explained. 130 | 131 | Pods -------------------------------------------------------------------------------- /PopulateKit/ACPopulate.h: -------------------------------------------------------------------------------- 1 | // 2 | // ACPopulate.h 3 | // PopulateKit 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class ACPersonSet; 12 | 13 | 14 | /** ACPopulate let you easily add fake (randomly-generated) contacts to the iOS address book. 15 | * 16 | * ACPopulate uses ACPerson, an Objective-C wrapper for the ABPerson records from the AddressBook Kit. An array of ACPerson can be passed to the ACPopulate populateGroupWithName:withPersons:completion: method to be added to the address book. 17 | * 18 | * ACPopulate can also use one or multiple ACPersonSet, a set of persons with populateGroupWithName:withCountOfPersons:fromSet:completion: and populateGroupWithName:withCountOfPersons:fromSets:completion:. These methods choose randomly a given number of persons from those sets and add them to the address book. 19 | * 20 | * A group name can be specified, and is recommended, for easier manipulation and later deletion of the contacts. If a group already exists with the same name, the methods will reuse the existing group instead of making a new one. 21 | * 22 | * ** Be careful not to erase any real contact if you use ACPopulate on a real device! ** 23 | */ 24 | 25 | @interface ACPopulate : NSObject 26 | 27 | /** @name Adding contacts to the address book */ 28 | 29 | /** Add a list of persons to the address book. 30 | * @param groupName The name of the group to add the persons. 31 | * @param arrayOfPersons An array of ACPerson to be added to the address book. 32 | * @param block A block called when all persons are added. 33 | */ 34 | + (void)populateGroupWithName:(NSString*)groupName withPersons:(NSArray*)arrayOfPersons completion:(void(^)(void))block; 35 | 36 | /** Add a number of persons from a person set to the address book. 37 | * @param groupName The name of the group to add the persons. 38 | * @param countOfPersons Number of persons to be added to the address book. 39 | * @param personSet A set of persons. 40 | * @param block A block called when all persons are added. 41 | * @discussion A _countOfPersons_ number of persons from _personSet_ are randomly selected and added to the address book. If a group name was specified, the persons are added as members of group. If group with named _groupName_ already existed, it is used, otherwise a new group named _groupName_ is created. 42 | */ 43 | + (void)populateGroupWithName:(NSString*)groupName withCountOfPersons:(NSUInteger)countOfPersons fromSet:(ACPersonSet*)personSet completion:(void(^)(void))block; 44 | 45 | /** Add a number of persons from a list of person set to the address book. 46 | * @param groupName The name of the group to add the persons. 47 | * @param countOfPersons Number of persons to be added to the address book. 48 | * @param arrayOfPersonSets An array of set of persons. 49 | * @param block A block called when all persons are added. 50 | * @discussion A _countOfPersons_ number of persons from the sets in _arrayOfPersonSets_ are randomly selected and added to the address book. If _groupName_ was specified, the persons are added as members of _groupName_. If group with named _groupName_ already existed, it is used, otherwise a new group named _groupName_ is created. 51 | */ 52 | + (void)populateGroupWithName:(NSString*)groupName withCountOfPersons:(NSUInteger)countOfPersons fromSets:(NSArray*)arrayOfPersonSets completion:(void(^)(void))block; 53 | 54 | 55 | /** @name Removing contacts from the address book */ 56 | 57 | /** Removes all persons belonging to a group from the address book. 58 | * @param groupName The name of the group to remove. 59 | * @discussion The group and all its members are removed from the address book. The method has no effect if no group name was given. 60 | */ 61 | + (void)depopulateGroupWithName:(NSString*)groupName completion:(void(^)(void))block; 62 | 63 | @end 64 | -------------------------------------------------------------------------------- /PopulateKit/ACPopulate.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPopulate.m 3 | // PopulateKit 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACPopulate.h" 10 | #import 11 | #import "ACAddressBook.h" 12 | #import "ACPerson.h" 13 | #import "ACPersonSet.h" 14 | 15 | @implementation ACPopulate 16 | 17 | + (void)populateGroupWithName:(NSString*)groupName 18 | withCountOfPersons:(NSUInteger)countOfPersons 19 | fromSet:(ACPersonSet*)personSet 20 | completion:(void (^)(void))block { 21 | [self populateGroupWithName:groupName withCountOfPersons:countOfPersons fromSets:@[personSet] completion:block]; 22 | } 23 | 24 | + (void)populateGroupWithName:(NSString*)groupName 25 | withCountOfPersons:(NSUInteger)countOfPersons 26 | fromSets:(NSArray*)arrayOfPersonSets 27 | completion:(void (^)(void))block { 28 | 29 | NSMutableArray *arrayOfPersons = [NSMutableArray arrayWithCapacity:countOfPersons]; 30 | 31 | for (int i=countOfPersons; i>0; i--) { 32 | ACPersonSet *personSet = arrayOfPersonSets[arc4random_uniform(arrayOfPersonSets.count)]; 33 | [arrayOfPersons addObject:[personSet randomPerson]]; 34 | } 35 | 36 | [self populateGroupWithName:groupName withPersons:arrayOfPersons completion:block]; 37 | } 38 | 39 | + (void)populateGroupWithName:(NSString*)groupName withPersons:(NSArray*)arrayOfPersons completion:(void (^)(void))block { 40 | 41 | CFErrorRef error = NULL; 42 | 43 | ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, &error); 44 | ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 45 | 46 | ABRecordRef groupRef = NULL; 47 | if (groupName) { 48 | 49 | groupRef = ABAddressBookGetCopyGroupWithName(addressBookRef, (__bridge CFStringRef)(groupName)); 50 | if (!groupRef) { 51 | groupRef = ABAddressBookCreateGroupWithName(addressBookRef, (__bridge CFStringRef)(groupName)); 52 | } 53 | } 54 | 55 | for (ACPerson *person in arrayOfPersons) { 56 | ABRecordRef personRef = ABPersonCreateFromPerson(person); 57 | ABAddressBookAddRecord(addressBookRef, personRef, &error); 58 | ABAddressBookSave(addressBookRef, &error); 59 | 60 | if (groupRef) { 61 | ABGroupAddMember(groupRef, personRef, &error); 62 | ABAddressBookSave(addressBookRef, &error); 63 | } 64 | CFRelease(personRef); 65 | } 66 | 67 | ABAddressBookSave(addressBookRef, &error); 68 | NSLog(@"added records."); 69 | 70 | if (groupRef) { 71 | CFRelease(groupRef); 72 | } 73 | CFRelease(addressBookRef); 74 | 75 | if (block) block(); 76 | }); 77 | } 78 | 79 | + (void)depopulateGroupWithName:(NSString*)groupName completion:(void (^)(void))block { 80 | 81 | CFErrorRef error = NULL; 82 | 83 | ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, &error); 84 | ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 85 | 86 | if (groupName) { 87 | ABRecordRef groupRef = ABAddressBookGetCopyGroupWithName(addressBookRef, (__bridge CFStringRef)(groupName)); 88 | 89 | if (groupRef) { 90 | CFArrayRef personsRef = ABGroupCopyArrayOfAllMembers(groupRef); 91 | if (personsRef) { 92 | for (CFIndex i = 0; i < CFArrayGetCount(personsRef); i++) { 93 | ABRecordRef personRef = CFArrayGetValueAtIndex(personsRef, i); 94 | ABAddressBookRemoveRecord(addressBookRef, personRef, &error); 95 | } 96 | CFRelease(personsRef); 97 | } 98 | 99 | ABAddressBookRemoveRecord(addressBookRef, groupRef, &error); 100 | ABAddressBookSave(addressBookRef, &error); 101 | NSLog(@"removed records."); 102 | 103 | CFRelease(groupRef); 104 | } 105 | } 106 | CFRelease(addressBookRef); 107 | 108 | if (block) block(); 109 | }); 110 | } 111 | 112 | @end 113 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Populate 2 | 3 | Populate is both an iOS app and library to easily create random-generated contacts. 4 | 5 | - the Populate app let you configure and add contacts to the iOS address book. 6 | - the PopulateKit library let you create contacts for either adding to the address book or any other purpose. 7 | 8 | 9 | [![Build Status](https://api.travis-ci.org/acoomans/Populate.png)](https://api.travis-ci.org/acoomans/Populate.png) 10 | [![Cocoapods](https://cocoapod-badges.herokuapp.com/v/PopulateKit/badge.png)](http://beta.cocoapods.org/?q=on%3Aios%20name%3APopulateKit%2A) 11 | [![Cocoapods](https://cocoapod-badges.herokuapp.com/p/PopulateKit/badge.png)](http://beta.cocoapods.org/?q=on%3Aios%20name%3APopulateKit%2A) 12 | 13 | 14 | ## Screenshots 15 | 16 | ![screenshot01](https://github.com/acoomans/Populate/raw/master/Screenshots/screenshot01.png) 17 |    18 | ![screenshot02](https://github.com/acoomans/Populate/raw/master/Screenshots/screenshot02.png) 19 | 20 | 21 | ## Populate app 22 | 23 | ### Run the app 24 | 25 | 1. Install the [pods](http://cocoapods.org) with `pod install` 26 | 2. Open _Populate.xcworkspace_ (the **workspace**, not the project), build it and run it 27 | 3. Choose a group name (useful for later deletion), number of contacts, type of name and type of photo 28 | 5. Tap _populate_ to add the contacts 29 | 6. Tap _depopulate_ to remove the group and all its member contacts 30 | 31 | You can tap _contacts_ to open the address book without switching apps. 32 | 33 | 34 | ** Be careful not to erase your real contact if you use Populate on a real device ** 35 | 36 | 37 | ## PopulateKit library 38 | 39 | ### Install with [CocoaPods](http://cocoapods.org) 40 | 41 | Add a pod entry to your Podfile: 42 | 43 | pod 'PopulateKit', '~> 0.0.4' 44 | 45 | Install the pod(s) by running: 46 | 47 | pod install 48 | 49 | ### Install manually 50 | 51 | 1. clone this repository 52 | 2. add the files in the _PopulateKit_ directory to your project 53 | 3. link your app with the _AddressBook_ framework 54 | 4. set `OTHER_LINKER_FLAGS="-ObjC" for your target 55 | 56 | If you want the (optional) identicons, you should also add [IGIdenticon](https://github.com/Seaburg/IGIdenticon) to your project. 57 | 58 | ### Usage 59 | 60 | Import the header 61 | 62 | #import "PopulateKit.h" 63 | 64 | #### Adding contacts to the address book 65 | 66 | To add hand-made contacts to the address book, create the contacts with the _ACPerson_ wrapper and add them to _Test_ group in the address book: 67 | 68 | ACPerson *personA = [[ACPerson alloc] initWithFirstname:@"Alice" 69 | lastName:@"A" 70 | email:@"alice@example.com" 71 | phone:@"555-111-1111" 72 | image:nil]; 73 | ACPerson *personB = [[ACPerson alloc] initWithFirstname:@"Bob" 74 | lastName:@"B" 75 | email:@"bob@example.com" 76 | phone:@"555-222-2222" 77 | image:nil]; 78 | ACPerson *personC = [[ACPerson alloc] initWithFirstname:@"Charlie" 79 | lastName:@"C" 80 | email:@"charles@example.com" 81 | phone:@"555-333-3333" 82 | image:nil]; 83 | 84 | [ACPopulate populateGroupWithName:@"Test" 85 | withPersons:@[personA, personB, personC] 86 | completion:nil]; 87 | 88 | To add randomly-generated contacts instead, use a _ACPersonSet_: 89 | 90 | [ACPopulate populateGroupWithName:@"Test" 91 | withCountOfPersons:10 92 | fromSet:[ACPersonSet personSetWithRandomNameAndImage] 93 | completion:nil]; 94 | 95 | It is possible to populate with a custom _ACPersonSet_ by using data sets (_ACNameSet_ and _ACImageSet_). Here is an example of populating with random first names, common US surnames and [identicon](https://en.wikipedia.org/wiki/Identicon) avatars: 96 | 97 | [ACPopulate populateGroupWithName:@"Test" 98 | withCountOfPersons:10 99 | fromSet:[ACPersonSet setWithFirstNameSet:[ACNameSet randomNameSet] 100 | lastNameSet:[ACNameSet commonSurnameSet] 101 | imageSet:[ACImageSet identiconImageSet] 102 | completion:nil]; 103 | 104 | Or you can supply multiple _ACPersonSet_, like a male and a female set: 105 | 106 | [ACPopulate populateGroupWithName:@"Test" 107 | withCountOfPersons:10 108 | fromSets:@[ 109 | [ACPersonSet setWithFirstNameSet:[ACNameSet commonMaleNameSet] 110 | lastNameSet:[ACNameSet commonSurnameSet] 111 | imageSet:[ACImageSet maleFaceImageSet]], 112 | 113 | [ACPersonSet setWithFirstNameSet:[ACNameSet commonFemaleNameSet] 114 | lastNameSet:[ACNameSet commonSurnameSet] 115 | imageSet:[ACImageSet femaleFaceImageSet]] 116 | ] 117 | completion:nil]; 118 | 119 | 120 | 121 | If you want to delete the _Test_ group and all its members from the addess book: 122 | 123 | [ACPopulate depopulateGroupWithName:@"Test" completion:nil]; 124 | 125 | You can also have a look at the _Populate_ app for inspiration. 126 | 127 | 128 | #### Generating contacts 129 | 130 | If you want to use randomly-generated contacts directly: 131 | 132 | ACPersonSet *personSet = [ACPersonSet setWithFirstNameSet:[ACNameSet randomNameSet] 133 | lastNameSet:[ACNameSet commonSurnameSet] 134 | imageSet:[ACImageSet identiconImageSet]]; 135 | ACPerson *person = [personSet randomPerson]; 136 | NSLog(@"%@", person.firstName); 137 | 138 | 139 | 140 | 141 | ## Documentation 142 | 143 | If you have [appledoc](http://gentlebytes.com/appledoc/) installed, you can generate the documentation by running the corresponding target. 144 | -------------------------------------------------------------------------------- /Populate/ACPopulateViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ACPopulateViewController.m 3 | // Populate 4 | // 5 | // Created by Arnaud Coomans on 27/01/14. 6 | // Copyright (c) 2014 Arnaud Coomans. All rights reserved. 7 | // 8 | 9 | #import "ACPopulateViewController.h" 10 | #import "PopulateKit.h" 11 | 12 | static const NSInteger ACPopulateViewControllerMaxCountOfPersons = 10000; 13 | 14 | static NSString * const ACPopulateViewControllerGroupNameKey = @"groupName"; 15 | static NSString * const ACPopulateViewControllerCountOfPersonsKey = @"countOfPersons"; 16 | static NSString * const ACPopulateViewControllerNameTypeKey = @"nameType"; 17 | static NSString * const ACPopulateViewControllerImageTypeKey = @"imageType"; 18 | 19 | 20 | NS_ENUM(NSInteger, ACPopulateViewControllerNameType) { 21 | ACPopulateViewControllerNameTypeRandom = 0, 22 | ACPopulateViewControllerNameTypeReal = 1, 23 | }; 24 | 25 | NS_ENUM(NSInteger, ACPopulateViewControllerImageType) { 26 | ACPopulateViewControllerImageTypeColor = 0, 27 | ACPopulateViewControllerImageTypeIdenticon = 1, 28 | ACPopulateViewControllerImageTypeFace = 2, 29 | }; 30 | 31 | @interface ACPopulateViewController () 32 | @end 33 | 34 | @implementation ACPopulateViewController 35 | 36 | - (void)viewDidLoad { 37 | [super viewDidLoad]; 38 | 39 | self.groupNameTextField.text = [[NSUserDefaults standardUserDefaults] objectForKey:ACPopulateViewControllerGroupNameKey] ?: self.groupNameTextField.text; 40 | self.countOfPersonsTextField.text = [[[NSUserDefaults standardUserDefaults] objectForKey:ACPopulateViewControllerCountOfPersonsKey] stringValue] ?: self.countOfPersonsTextField.text; 41 | self.nameSegmentedControl.selectedSegmentIndex = [([[NSUserDefaults standardUserDefaults] objectForKey:ACPopulateViewControllerNameTypeKey] ?: @(self.nameSegmentedControl.selectedSegmentIndex)) integerValue]; 42 | self.imageSegmentedControl.selectedSegmentIndex = [([[NSUserDefaults standardUserDefaults] objectForKey:ACPopulateViewControllerImageTypeKey] ?: @(self.imageSegmentedControl.selectedSegmentIndex)) integerValue]; 43 | 44 | self.countOfPersonsStepper.value = [self.countOfPersonsTextField.text doubleValue]; 45 | } 46 | 47 | 48 | #pragma mark - actions 49 | 50 | - (IBAction)populateButtonDidTouchUpInside:(id)sender { 51 | 52 | ACNameSet *maleNameSet = nil; 53 | ACNameSet *femaleNameSet = nil; 54 | ACNameSet *surnameSet = nil; 55 | 56 | ACImageSet *maleImageSet = nil; 57 | ACImageSet *femaleImageSet = nil; 58 | 59 | switch (self.nameSegmentedControl.selectedSegmentIndex) { 60 | case ACPopulateViewControllerNameTypeRandom: 61 | surnameSet = maleNameSet = femaleNameSet = [ACNameSet randomNameSet]; 62 | break; 63 | 64 | case ACPopulateViewControllerNameTypeReal: 65 | default: 66 | maleNameSet = [ACNameSet commonMaleNameSet]; 67 | femaleNameSet = [ACNameSet commonFemaleNameSet]; 68 | surnameSet = [ACNameSet commonSurnameSet]; 69 | break; 70 | } 71 | 72 | switch (self.imageSegmentedControl.selectedSegmentIndex) { 73 | case ACPopulateViewControllerImageTypeColor: 74 | maleImageSet = femaleImageSet = [ACImageSet randomColorImageSet]; 75 | break; 76 | 77 | case ACPopulateViewControllerImageTypeFace: 78 | maleImageSet = [ACImageSet maleFaceImageSet]; 79 | femaleImageSet = [ACImageSet femaleFaceImageSet]; 80 | break; 81 | 82 | case ACPopulateViewControllerImageTypeIdenticon: 83 | default: 84 | maleImageSet = [ACImageSet maleFaceImageSet]; 85 | break; 86 | } 87 | 88 | self.populateButton.enabled = NO; 89 | 90 | [ACPopulate populateGroupWithName:self.groupNameTextField.text 91 | withCountOfPersons:[self.countOfPersonsTextField.text integerValue] 92 | fromSets:@[ 93 | [ACPersonSet setWithFirstNameSet:maleNameSet 94 | lastNameSet:surnameSet 95 | imageSet:maleImageSet], 96 | 97 | [ACPersonSet setWithFirstNameSet:femaleNameSet 98 | lastNameSet:surnameSet 99 | imageSet:femaleImageSet] 100 | ] 101 | completion:^{ 102 | self.populateButton.enabled = YES; 103 | }]; 104 | 105 | 106 | [[NSUserDefaults standardUserDefaults] setObject:self.groupNameTextField.text forKey:ACPopulateViewControllerGroupNameKey]; 107 | [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithInt:[self.countOfPersonsTextField.text integerValue]] forKey:ACPopulateViewControllerCountOfPersonsKey]; 108 | [[NSUserDefaults standardUserDefaults] setObject:@(self.nameSegmentedControl.selectedSegmentIndex) forKey:ACPopulateViewControllerNameTypeKey]; 109 | [[NSUserDefaults standardUserDefaults] setObject:@(self.imageSegmentedControl.selectedSegmentIndex) forKey:ACPopulateViewControllerImageTypeKey]; 110 | } 111 | 112 | - (IBAction)depopulateButtonDidTouchUpInside:(id)sender { 113 | [[[UIAlertView alloc] initWithTitle:@"Depopulate" 114 | message:[NSString stringWithFormat:@"Remove group \"%@\" and all its contacts?", self.groupNameTextField.text] 115 | delegate:self 116 | cancelButtonTitle:@"Cancel" 117 | otherButtonTitles:@"Ok", nil] show]; 118 | } 119 | 120 | - (IBAction)countOfPersonsStepperValueDidChange:(id)sender { 121 | self.countOfPersonsTextField.text = [NSString stringWithFormat:@"%i", MIN((int)self.countOfPersonsStepper.value, ACPopulateViewControllerMaxCountOfPersons)]; 122 | } 123 | 124 | - (IBAction)contactsButtonAction:(id)sender { 125 | ABPeoplePickerNavigationController *peoplePickerNavigationController = [[ABPeoplePickerNavigationController alloc] init]; 126 | peoplePickerNavigationController.peoplePickerDelegate = self; 127 | [self presentViewController:peoplePickerNavigationController animated:YES completion:nil]; 128 | } 129 | 130 | 131 | #pragma mark - UIAlertViewDelegate 132 | 133 | - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 134 | self.depopulateButton.enabled = NO; 135 | 136 | switch (buttonIndex) { 137 | case 0: { 138 | break; 139 | } 140 | 141 | case 1: { 142 | [ACPopulate depopulateGroupWithName:self.groupNameTextField.text completion:^{ 143 | self.depopulateButton.enabled = YES; 144 | }]; 145 | break; 146 | } 147 | 148 | default: 149 | break; 150 | } 151 | } 152 | 153 | #pragma mark - ABPeoplePickerNavigationControllerDelegate 154 | 155 | - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { 156 | return YES; 157 | } 158 | 159 | - (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker 160 | shouldContinueAfterSelectingPerson:(ABRecordRef)person 161 | property:(ABPropertyID)property 162 | identifier:(ABMultiValueIdentifier)identifier { 163 | return YES; 164 | } 165 | 166 | - (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker { 167 | [self dismissViewControllerAnimated:YES completion:nil]; 168 | } 169 | 170 | #pragma mark - UITextFieldDelegate 171 | 172 | - (BOOL)textFieldShouldReturn:(UITextField *)textField { 173 | [textField resignFirstResponder]; 174 | return YES; 175 | } 176 | 177 | 178 | - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 179 | if (textField == self.countOfPersonsTextField) { 180 | NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string]; 181 | self.countOfPersonsStepper.value = MIN([newString integerValue], ACPopulateViewControllerMaxCountOfPersons); 182 | self.countOfPersonsTextField.text = [NSString stringWithFormat:@"%i", (int)self.countOfPersonsStepper.value]; 183 | return NO; 184 | } 185 | return YES; 186 | } 187 | 188 | 189 | 190 | @end 191 | -------------------------------------------------------------------------------- /Populate/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 103 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | -------------------------------------------------------------------------------- /Populate.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5145DB7E1897392F007B97E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB7D1897392F007B97E6 /* Foundation.framework */; }; 11 | 5145DB801897392F007B97E6 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB7F1897392F007B97E6 /* CoreGraphics.framework */; }; 12 | 5145DB821897392F007B97E6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB811897392F007B97E6 /* UIKit.framework */; }; 13 | 5145DB881897392F007B97E6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5145DB861897392F007B97E6 /* InfoPlist.strings */; }; 14 | 5145DB8A1897392F007B97E6 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DB891897392F007B97E6 /* main.m */; }; 15 | 5145DB8E1897392F007B97E6 /* ACAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DB8D1897392F007B97E6 /* ACAppDelegate.m */; }; 16 | 5145DB911897392F007B97E6 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5145DB8F1897392F007B97E6 /* Main.storyboard */; }; 17 | 5145DB941897392F007B97E6 /* ACPopulateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DB931897392F007B97E6 /* ACPopulateViewController.m */; }; 18 | 5145DB961897392F007B97E6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5145DB951897392F007B97E6 /* Images.xcassets */; }; 19 | 5145DB9D1897392F007B97E6 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB9C1897392F007B97E6 /* XCTest.framework */; }; 20 | 5145DB9E1897392F007B97E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB7D1897392F007B97E6 /* Foundation.framework */; }; 21 | 5145DB9F1897392F007B97E6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB811897392F007B97E6 /* UIKit.framework */; }; 22 | 5145DBA71897392F007B97E6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5145DBA51897392F007B97E6 /* InfoPlist.strings */; }; 23 | 5145DBA91897392F007B97E6 /* PopulateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBA81897392F007B97E6 /* PopulateTests.m */; }; 24 | 5145DBB718973A74007B97E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB7D1897392F007B97E6 /* Foundation.framework */; }; 25 | 5145DBBC18973A74007B97E6 /* ACPopulate.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 5145DBBB18973A74007B97E6 /* ACPopulate.h */; }; 26 | 5145DBBE18973A74007B97E6 /* ACPopulate.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBBD18973A74007B97E6 /* ACPopulate.m */; }; 27 | 5145DBC418973A74007B97E6 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB9C1897392F007B97E6 /* XCTest.framework */; }; 28 | 5145DBC518973A74007B97E6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB7D1897392F007B97E6 /* Foundation.framework */; }; 29 | 5145DBC618973A74007B97E6 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DB811897392F007B97E6 /* UIKit.framework */; }; 30 | 5145DBC918973A74007B97E6 /* libPopulateKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DBB618973A74007B97E6 /* libPopulateKit.a */; }; 31 | 5145DBCF18973A74007B97E6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5145DBCD18973A74007B97E6 /* InfoPlist.strings */; }; 32 | 5145DBD118973A74007B97E6 /* PopulateKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBD018973A74007B97E6 /* PopulateKitTests.m */; }; 33 | 5145DBE418973C61007B97E6 /* libPopulateKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DBB618973A74007B97E6 /* libPopulateKit.a */; }; 34 | 5145DBE718973CD3007B97E6 /* libPopulateKit.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5145DBB618973A74007B97E6 /* libPopulateKit.a */; }; 35 | 5145DBED189753F2007B97E6 /* ACAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBEA189753F2007B97E6 /* ACAddressBook.m */; }; 36 | 5145DBEE189753F2007B97E6 /* ACPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBEC189753F2007B97E6 /* ACPerson.m */; }; 37 | 5145DC101897732D007B97E6 /* ACPersonSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBF21897732D007B97E6 /* ACPersonSet.m */; }; 38 | 5145DC121897732D007B97E6 /* ACImageSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBF71897732D007B97E6 /* ACImageSet.m */; }; 39 | 5145DC141897732D007B97E6 /* ACRandomColorImageSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBFB1897732D007B97E6 /* ACRandomColorImageSet.m */; }; 40 | 5145DC151897732D007B97E6 /* UIImage+Random.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DBFD1897732D007B97E6 /* UIImage+Random.m */; }; 41 | 5145DC161897732D007B97E6 /* ACNameSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC001897732D007B97E6 /* ACNameSet.m */; }; 42 | 5145DC1A1897732D007B97E6 /* ACRandomNameSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC081897732D007B97E6 /* ACRandomNameSet.m */; }; 43 | 5145DC1B1897732D007B97E6 /* NSCharacterSet+NSSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC0A1897732D007B97E6 /* NSCharacterSet+NSSet.m */; }; 44 | 5145DC1C1897732D007B97E6 /* NSString+Random.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC0C1897732D007B97E6 /* NSString+Random.m */; }; 45 | 5145DC1D1897732D007B97E6 /* NSString+Randomized.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC0E1897732D007B97E6 /* NSString+Randomized.m */; }; 46 | 5145DC38189775DC007B97E6 /* ACPersonSetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC2F189775DC007B97E6 /* ACPersonSetTests.m */; }; 47 | 5145DC39189775DC007B97E6 /* ACImageSetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC31189775DC007B97E6 /* ACImageSetTests.m */; }; 48 | 5145DC3A189775DC007B97E6 /* UIImage+pixelColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC33189775DC007B97E6 /* UIImage+pixelColor.m */; }; 49 | 5145DC3B189775DC007B97E6 /* ACNameSetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC35189775DC007B97E6 /* ACNameSetTests.m */; }; 50 | 5145DC3C189775DC007B97E6 /* NSCharacterSet_NSSetTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC36189775DC007B97E6 /* NSCharacterSet_NSSetTest.m */; }; 51 | 5145DC3D189775DC007B97E6 /* NSString_RandomTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5145DC37189775DC007B97E6 /* NSString_RandomTests.m */; }; 52 | 51DE649D1897992200CA6E79 /* AddressBook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51DE649C1897992200CA6E79 /* AddressBook.framework */; }; 53 | 51DE64E71897A57600CA6E79 /* ACIdenticonImageSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64E61897A57600CA6E79 /* ACIdenticonImageSet.m */; }; 54 | 51DE64EA1897A90A00CA6E79 /* ACCommonSurnameSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64E91897A90A00CA6E79 /* ACCommonSurnameSet.m */; }; 55 | 51DE64EC1897ABE700CA6E79 /* PopulateKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 51DE64EB1897ABE700CA6E79 /* PopulateKit.bundle */; }; 56 | 51DE64ED1897AD8500CA6E79 /* PopulateKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 51DE64EB1897ABE700CA6E79 /* PopulateKit.bundle */; }; 57 | 51DE64F01897B5A100CA6E79 /* ACCommonFemaleNameSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64EF1897B5A100CA6E79 /* ACCommonFemaleNameSet.m */; }; 58 | 51DE64F31897B6C500CA6E79 /* ACCommonMaleNameSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64F21897B6C500CA6E79 /* ACCommonMaleNameSet.m */; }; 59 | 51DE64F61897B9A700CA6E79 /* ACMaleFaceImageSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64F51897B9A700CA6E79 /* ACMaleFaceImageSet.m */; }; 60 | 51DE64F91897C05A00CA6E79 /* ACFemaleFaceImageSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 51DE64F81897C05A00CA6E79 /* ACFemaleFaceImageSet.m */; }; 61 | BEDF3723686F4758B8047FD3 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 81A7F917AEE640FF86C42E62 /* libPods.a */; }; 62 | /* End PBXBuildFile section */ 63 | 64 | /* Begin PBXContainerItemProxy section */ 65 | 5145DBA01897392F007B97E6 /* PBXContainerItemProxy */ = { 66 | isa = PBXContainerItemProxy; 67 | containerPortal = 5145DB721897392F007B97E6 /* Project object */; 68 | proxyType = 1; 69 | remoteGlobalIDString = 5145DB791897392F007B97E6; 70 | remoteInfo = Populate; 71 | }; 72 | 5145DBC718973A74007B97E6 /* PBXContainerItemProxy */ = { 73 | isa = PBXContainerItemProxy; 74 | containerPortal = 5145DB721897392F007B97E6 /* Project object */; 75 | proxyType = 1; 76 | remoteGlobalIDString = 5145DBB518973A74007B97E6; 77 | remoteInfo = PopulateKit; 78 | }; 79 | /* End PBXContainerItemProxy section */ 80 | 81 | /* Begin PBXCopyFilesBuildPhase section */ 82 | 5145DBB418973A74007B97E6 /* CopyFiles */ = { 83 | isa = PBXCopyFilesBuildPhase; 84 | buildActionMask = 2147483647; 85 | dstPath = "include/$(PRODUCT_NAME)"; 86 | dstSubfolderSpec = 16; 87 | files = ( 88 | 5145DBBC18973A74007B97E6 /* ACPopulate.h in CopyFiles */, 89 | ); 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXCopyFilesBuildPhase section */ 93 | 94 | /* Begin PBXFileReference section */ 95 | 17083C894B4242C4AD10962C /* Pods.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.xcconfig; path = Pods/Pods.xcconfig; sourceTree = ""; }; 96 | 5145DB7A1897392F007B97E6 /* Populate.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Populate.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97 | 5145DB7D1897392F007B97E6 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 98 | 5145DB7F1897392F007B97E6 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 99 | 5145DB811897392F007B97E6 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 100 | 5145DB851897392F007B97E6 /* Populate-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Populate-Info.plist"; sourceTree = ""; }; 101 | 5145DB871897392F007B97E6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 102 | 5145DB891897392F007B97E6 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 103 | 5145DB8B1897392F007B97E6 /* Populate-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Populate-Prefix.pch"; sourceTree = ""; }; 104 | 5145DB8C1897392F007B97E6 /* ACAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ACAppDelegate.h; sourceTree = ""; }; 105 | 5145DB8D1897392F007B97E6 /* ACAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ACAppDelegate.m; sourceTree = ""; }; 106 | 5145DB901897392F007B97E6 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 107 | 5145DB921897392F007B97E6 /* ACPopulateViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ACPopulateViewController.h; sourceTree = ""; }; 108 | 5145DB931897392F007B97E6 /* ACPopulateViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ACPopulateViewController.m; sourceTree = ""; }; 109 | 5145DB951897392F007B97E6 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 110 | 5145DB9B1897392F007B97E6 /* PopulateTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PopulateTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 111 | 5145DB9C1897392F007B97E6 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 112 | 5145DBA41897392F007B97E6 /* PopulateTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PopulateTests-Info.plist"; sourceTree = ""; }; 113 | 5145DBA61897392F007B97E6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 114 | 5145DBA81897392F007B97E6 /* PopulateTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PopulateTests.m; sourceTree = ""; }; 115 | 5145DBB618973A74007B97E6 /* libPopulateKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPopulateKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; 116 | 5145DBBA18973A74007B97E6 /* PopulateKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PopulateKit-Prefix.pch"; sourceTree = ""; }; 117 | 5145DBBB18973A74007B97E6 /* ACPopulate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ACPopulate.h; sourceTree = ""; }; 118 | 5145DBBD18973A74007B97E6 /* ACPopulate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ACPopulate.m; sourceTree = ""; }; 119 | 5145DBC318973A74007B97E6 /* PopulateKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PopulateKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 120 | 5145DBCC18973A74007B97E6 /* PopulateKitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PopulateKitTests-Info.plist"; sourceTree = ""; }; 121 | 5145DBCE18973A74007B97E6 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 122 | 5145DBD018973A74007B97E6 /* PopulateKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PopulateKitTests.m; sourceTree = ""; }; 123 | 5145DBE9189753F2007B97E6 /* ACAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACAddressBook.h; sourceTree = ""; }; 124 | 5145DBEA189753F2007B97E6 /* ACAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACAddressBook.m; sourceTree = ""; }; 125 | 5145DBEB189753F2007B97E6 /* ACPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACPerson.h; sourceTree = ""; }; 126 | 5145DBEC189753F2007B97E6 /* ACPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACPerson.m; sourceTree = ""; }; 127 | 5145DBEF189755EE007B97E6 /* PopulateKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PopulateKit.h; sourceTree = ""; }; 128 | 5145DBF11897732D007B97E6 /* ACPersonSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACPersonSet.h; sourceTree = ""; }; 129 | 5145DBF21897732D007B97E6 /* ACPersonSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACPersonSet.m; sourceTree = ""; }; 130 | 5145DBF61897732D007B97E6 /* ACImageSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACImageSet.h; sourceTree = ""; }; 131 | 5145DBF71897732D007B97E6 /* ACImageSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACImageSet.m; sourceTree = ""; }; 132 | 5145DBFA1897732D007B97E6 /* ACRandomColorImageSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACRandomColorImageSet.h; sourceTree = ""; }; 133 | 5145DBFB1897732D007B97E6 /* ACRandomColorImageSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACRandomColorImageSet.m; sourceTree = ""; }; 134 | 5145DBFC1897732D007B97E6 /* UIImage+Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Random.h"; sourceTree = ""; }; 135 | 5145DBFD1897732D007B97E6 /* UIImage+Random.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Random.m"; sourceTree = ""; }; 136 | 5145DBFF1897732D007B97E6 /* ACNameSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACNameSet.h; sourceTree = ""; }; 137 | 5145DC001897732D007B97E6 /* ACNameSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACNameSet.m; sourceTree = ""; }; 138 | 5145DC071897732D007B97E6 /* ACRandomNameSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACRandomNameSet.h; sourceTree = ""; }; 139 | 5145DC081897732D007B97E6 /* ACRandomNameSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACRandomNameSet.m; sourceTree = ""; }; 140 | 5145DC091897732D007B97E6 /* NSCharacterSet+NSSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSCharacterSet+NSSet.h"; sourceTree = ""; }; 141 | 5145DC0A1897732D007B97E6 /* NSCharacterSet+NSSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSCharacterSet+NSSet.m"; sourceTree = ""; }; 142 | 5145DC0B1897732D007B97E6 /* NSString+Random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Random.h"; sourceTree = ""; }; 143 | 5145DC0C1897732D007B97E6 /* NSString+Random.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Random.m"; sourceTree = ""; }; 144 | 5145DC0D1897732D007B97E6 /* NSString+Randomized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Randomized.h"; sourceTree = ""; }; 145 | 5145DC0E1897732D007B97E6 /* NSString+Randomized.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Randomized.m"; sourceTree = ""; }; 146 | 5145DC2F189775DC007B97E6 /* ACPersonSetTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACPersonSetTests.m; sourceTree = ""; }; 147 | 5145DC31189775DC007B97E6 /* ACImageSetTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACImageSetTests.m; sourceTree = ""; }; 148 | 5145DC32189775DC007B97E6 /* UIImage+pixelColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+pixelColor.h"; sourceTree = ""; }; 149 | 5145DC33189775DC007B97E6 /* UIImage+pixelColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+pixelColor.m"; sourceTree = ""; }; 150 | 5145DC35189775DC007B97E6 /* ACNameSetTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACNameSetTests.m; sourceTree = ""; }; 151 | 5145DC36189775DC007B97E6 /* NSCharacterSet_NSSetTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSCharacterSet_NSSetTest.m; sourceTree = ""; }; 152 | 5145DC37189775DC007B97E6 /* NSString_RandomTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSString_RandomTests.m; sourceTree = ""; }; 153 | 51DE649C1897992200CA6E79 /* AddressBook.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AddressBook.framework; path = System/Library/Frameworks/AddressBook.framework; sourceTree = SDKROOT; }; 154 | 51DE64E51897A57600CA6E79 /* ACIdenticonImageSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACIdenticonImageSet.h; sourceTree = ""; }; 155 | 51DE64E61897A57600CA6E79 /* ACIdenticonImageSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACIdenticonImageSet.m; sourceTree = ""; }; 156 | 51DE64E81897A90A00CA6E79 /* ACCommonSurnameSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACCommonSurnameSet.h; sourceTree = ""; }; 157 | 51DE64E91897A90A00CA6E79 /* ACCommonSurnameSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACCommonSurnameSet.m; sourceTree = ""; }; 158 | 51DE64EB1897ABE700CA6E79 /* PopulateKit.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = PopulateKit.bundle; sourceTree = ""; }; 159 | 51DE64EE1897B5A100CA6E79 /* ACCommonFemaleNameSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACCommonFemaleNameSet.h; sourceTree = ""; }; 160 | 51DE64EF1897B5A100CA6E79 /* ACCommonFemaleNameSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACCommonFemaleNameSet.m; sourceTree = ""; }; 161 | 51DE64F11897B6C500CA6E79 /* ACCommonMaleNameSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACCommonMaleNameSet.h; sourceTree = ""; }; 162 | 51DE64F21897B6C500CA6E79 /* ACCommonMaleNameSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACCommonMaleNameSet.m; sourceTree = ""; }; 163 | 51DE64F41897B9A700CA6E79 /* ACMaleFaceImageSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACMaleFaceImageSet.h; sourceTree = ""; }; 164 | 51DE64F51897B9A700CA6E79 /* ACMaleFaceImageSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACMaleFaceImageSet.m; sourceTree = ""; }; 165 | 51DE64F71897C05A00CA6E79 /* ACFemaleFaceImageSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACFemaleFaceImageSet.h; sourceTree = ""; }; 166 | 51DE64F81897C05A00CA6E79 /* ACFemaleFaceImageSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ACFemaleFaceImageSet.m; sourceTree = ""; }; 167 | 81A7F917AEE640FF86C42E62 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 168 | /* End PBXFileReference section */ 169 | 170 | /* Begin PBXFrameworksBuildPhase section */ 171 | 5145DB771897392F007B97E6 /* Frameworks */ = { 172 | isa = PBXFrameworksBuildPhase; 173 | buildActionMask = 2147483647; 174 | files = ( 175 | 5145DBE418973C61007B97E6 /* libPopulateKit.a in Frameworks */, 176 | 5145DB801897392F007B97E6 /* CoreGraphics.framework in Frameworks */, 177 | 5145DB821897392F007B97E6 /* UIKit.framework in Frameworks */, 178 | 5145DB7E1897392F007B97E6 /* Foundation.framework in Frameworks */, 179 | ); 180 | runOnlyForDeploymentPostprocessing = 0; 181 | }; 182 | 5145DB981897392F007B97E6 /* Frameworks */ = { 183 | isa = PBXFrameworksBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | 5145DBE718973CD3007B97E6 /* libPopulateKit.a in Frameworks */, 187 | 5145DB9D1897392F007B97E6 /* XCTest.framework in Frameworks */, 188 | 5145DB9F1897392F007B97E6 /* UIKit.framework in Frameworks */, 189 | 5145DB9E1897392F007B97E6 /* Foundation.framework in Frameworks */, 190 | ); 191 | runOnlyForDeploymentPostprocessing = 0; 192 | }; 193 | 5145DBB318973A74007B97E6 /* Frameworks */ = { 194 | isa = PBXFrameworksBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | 51DE649D1897992200CA6E79 /* AddressBook.framework in Frameworks */, 198 | 5145DBB718973A74007B97E6 /* Foundation.framework in Frameworks */, 199 | BEDF3723686F4758B8047FD3 /* libPods.a in Frameworks */, 200 | ); 201 | runOnlyForDeploymentPostprocessing = 0; 202 | }; 203 | 5145DBC018973A74007B97E6 /* Frameworks */ = { 204 | isa = PBXFrameworksBuildPhase; 205 | buildActionMask = 2147483647; 206 | files = ( 207 | 5145DBC918973A74007B97E6 /* libPopulateKit.a in Frameworks */, 208 | 5145DBC418973A74007B97E6 /* XCTest.framework in Frameworks */, 209 | 5145DBC618973A74007B97E6 /* UIKit.framework in Frameworks */, 210 | 5145DBC518973A74007B97E6 /* Foundation.framework in Frameworks */, 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | }; 214 | /* End PBXFrameworksBuildPhase section */ 215 | 216 | /* Begin PBXGroup section */ 217 | 5145DB711897392F007B97E6 = { 218 | isa = PBXGroup; 219 | children = ( 220 | 5145DB831897392F007B97E6 /* Populate */, 221 | 5145DBA21897392F007B97E6 /* PopulateTests */, 222 | 5145DBB818973A74007B97E6 /* PopulateKit */, 223 | 5145DBCA18973A74007B97E6 /* PopulateKitTests */, 224 | 5145DB7C1897392F007B97E6 /* Frameworks */, 225 | 5145DB7B1897392F007B97E6 /* Products */, 226 | 17083C894B4242C4AD10962C /* Pods.xcconfig */, 227 | ); 228 | sourceTree = ""; 229 | }; 230 | 5145DB7B1897392F007B97E6 /* Products */ = { 231 | isa = PBXGroup; 232 | children = ( 233 | 5145DB7A1897392F007B97E6 /* Populate.app */, 234 | 5145DB9B1897392F007B97E6 /* PopulateTests.xctest */, 235 | 5145DBB618973A74007B97E6 /* libPopulateKit.a */, 236 | 5145DBC318973A74007B97E6 /* PopulateKitTests.xctest */, 237 | ); 238 | name = Products; 239 | sourceTree = ""; 240 | }; 241 | 5145DB7C1897392F007B97E6 /* Frameworks */ = { 242 | isa = PBXGroup; 243 | children = ( 244 | 51DE649C1897992200CA6E79 /* AddressBook.framework */, 245 | 5145DB7D1897392F007B97E6 /* Foundation.framework */, 246 | 5145DB7F1897392F007B97E6 /* CoreGraphics.framework */, 247 | 5145DB811897392F007B97E6 /* UIKit.framework */, 248 | 5145DB9C1897392F007B97E6 /* XCTest.framework */, 249 | 81A7F917AEE640FF86C42E62 /* libPods.a */, 250 | ); 251 | name = Frameworks; 252 | sourceTree = ""; 253 | }; 254 | 5145DB831897392F007B97E6 /* Populate */ = { 255 | isa = PBXGroup; 256 | children = ( 257 | 5145DB8C1897392F007B97E6 /* ACAppDelegate.h */, 258 | 5145DB8D1897392F007B97E6 /* ACAppDelegate.m */, 259 | 5145DB921897392F007B97E6 /* ACPopulateViewController.h */, 260 | 5145DB931897392F007B97E6 /* ACPopulateViewController.m */, 261 | 5145DB8F1897392F007B97E6 /* Main.storyboard */, 262 | 5145DB951897392F007B97E6 /* Images.xcassets */, 263 | 5145DB841897392F007B97E6 /* Supporting Files */, 264 | ); 265 | path = Populate; 266 | sourceTree = ""; 267 | }; 268 | 5145DB841897392F007B97E6 /* Supporting Files */ = { 269 | isa = PBXGroup; 270 | children = ( 271 | 5145DB851897392F007B97E6 /* Populate-Info.plist */, 272 | 5145DB861897392F007B97E6 /* InfoPlist.strings */, 273 | 5145DB891897392F007B97E6 /* main.m */, 274 | 5145DB8B1897392F007B97E6 /* Populate-Prefix.pch */, 275 | ); 276 | name = "Supporting Files"; 277 | sourceTree = ""; 278 | }; 279 | 5145DBA21897392F007B97E6 /* PopulateTests */ = { 280 | isa = PBXGroup; 281 | children = ( 282 | 5145DBA81897392F007B97E6 /* PopulateTests.m */, 283 | 5145DBA31897392F007B97E6 /* Supporting Files */, 284 | ); 285 | path = PopulateTests; 286 | sourceTree = ""; 287 | }; 288 | 5145DBA31897392F007B97E6 /* Supporting Files */ = { 289 | isa = PBXGroup; 290 | children = ( 291 | 5145DBA41897392F007B97E6 /* PopulateTests-Info.plist */, 292 | 5145DBA51897392F007B97E6 /* InfoPlist.strings */, 293 | ); 294 | name = "Supporting Files"; 295 | sourceTree = ""; 296 | }; 297 | 5145DBB818973A74007B97E6 /* PopulateKit */ = { 298 | isa = PBXGroup; 299 | children = ( 300 | 5145DBEF189755EE007B97E6 /* PopulateKit.h */, 301 | 5145DBBB18973A74007B97E6 /* ACPopulate.h */, 302 | 5145DBBD18973A74007B97E6 /* ACPopulate.m */, 303 | 5145DBE8189753F2007B97E6 /* Addressbook */, 304 | 5145DBF01897732D007B97E6 /* DataSets */, 305 | 51DE64EB1897ABE700CA6E79 /* PopulateKit.bundle */, 306 | 5145DBB918973A74007B97E6 /* Supporting Files */, 307 | ); 308 | path = PopulateKit; 309 | sourceTree = ""; 310 | }; 311 | 5145DBB918973A74007B97E6 /* Supporting Files */ = { 312 | isa = PBXGroup; 313 | children = ( 314 | 5145DBBA18973A74007B97E6 /* PopulateKit-Prefix.pch */, 315 | ); 316 | name = "Supporting Files"; 317 | sourceTree = ""; 318 | }; 319 | 5145DBCA18973A74007B97E6 /* PopulateKitTests */ = { 320 | isa = PBXGroup; 321 | children = ( 322 | 5145DBD018973A74007B97E6 /* PopulateKitTests.m */, 323 | 5145DC2E189775DC007B97E6 /* DataSet */, 324 | 5145DBCB18973A74007B97E6 /* Supporting Files */, 325 | ); 326 | path = PopulateKitTests; 327 | sourceTree = ""; 328 | }; 329 | 5145DBCB18973A74007B97E6 /* Supporting Files */ = { 330 | isa = PBXGroup; 331 | children = ( 332 | 5145DBCC18973A74007B97E6 /* PopulateKitTests-Info.plist */, 333 | 5145DBCD18973A74007B97E6 /* InfoPlist.strings */, 334 | ); 335 | name = "Supporting Files"; 336 | sourceTree = ""; 337 | }; 338 | 5145DBE8189753F2007B97E6 /* Addressbook */ = { 339 | isa = PBXGroup; 340 | children = ( 341 | 5145DBE9189753F2007B97E6 /* ACAddressBook.h */, 342 | 5145DBEA189753F2007B97E6 /* ACAddressBook.m */, 343 | 5145DBEB189753F2007B97E6 /* ACPerson.h */, 344 | 5145DBEC189753F2007B97E6 /* ACPerson.m */, 345 | ); 346 | path = Addressbook; 347 | sourceTree = ""; 348 | }; 349 | 5145DBF01897732D007B97E6 /* DataSets */ = { 350 | isa = PBXGroup; 351 | children = ( 352 | 5145DBF11897732D007B97E6 /* ACPersonSet.h */, 353 | 5145DBF21897732D007B97E6 /* ACPersonSet.m */, 354 | 5145DBFE1897732D007B97E6 /* Name */, 355 | 5145DBF31897732D007B97E6 /* Image */, 356 | ); 357 | path = DataSets; 358 | sourceTree = ""; 359 | }; 360 | 5145DBF31897732D007B97E6 /* Image */ = { 361 | isa = PBXGroup; 362 | children = ( 363 | 5145DBF61897732D007B97E6 /* ACImageSet.h */, 364 | 5145DBF71897732D007B97E6 /* ACImageSet.m */, 365 | 5145DBFA1897732D007B97E6 /* ACRandomColorImageSet.h */, 366 | 5145DBFB1897732D007B97E6 /* ACRandomColorImageSet.m */, 367 | 5145DBFC1897732D007B97E6 /* UIImage+Random.h */, 368 | 5145DBFD1897732D007B97E6 /* UIImage+Random.m */, 369 | 51DE64E51897A57600CA6E79 /* ACIdenticonImageSet.h */, 370 | 51DE64E61897A57600CA6E79 /* ACIdenticonImageSet.m */, 371 | 51DE64F41897B9A700CA6E79 /* ACMaleFaceImageSet.h */, 372 | 51DE64F51897B9A700CA6E79 /* ACMaleFaceImageSet.m */, 373 | 51DE64F71897C05A00CA6E79 /* ACFemaleFaceImageSet.h */, 374 | 51DE64F81897C05A00CA6E79 /* ACFemaleFaceImageSet.m */, 375 | ); 376 | path = Image; 377 | sourceTree = ""; 378 | }; 379 | 5145DBFE1897732D007B97E6 /* Name */ = { 380 | isa = PBXGroup; 381 | children = ( 382 | 5145DBFF1897732D007B97E6 /* ACNameSet.h */, 383 | 5145DC001897732D007B97E6 /* ACNameSet.m */, 384 | 5145DC071897732D007B97E6 /* ACRandomNameSet.h */, 385 | 5145DC081897732D007B97E6 /* ACRandomNameSet.m */, 386 | 5145DC091897732D007B97E6 /* NSCharacterSet+NSSet.h */, 387 | 5145DC0A1897732D007B97E6 /* NSCharacterSet+NSSet.m */, 388 | 5145DC0D1897732D007B97E6 /* NSString+Randomized.h */, 389 | 5145DC0E1897732D007B97E6 /* NSString+Randomized.m */, 390 | 5145DC0B1897732D007B97E6 /* NSString+Random.h */, 391 | 5145DC0C1897732D007B97E6 /* NSString+Random.m */, 392 | 51DE64E81897A90A00CA6E79 /* ACCommonSurnameSet.h */, 393 | 51DE64E91897A90A00CA6E79 /* ACCommonSurnameSet.m */, 394 | 51DE64F11897B6C500CA6E79 /* ACCommonMaleNameSet.h */, 395 | 51DE64F21897B6C500CA6E79 /* ACCommonMaleNameSet.m */, 396 | 51DE64EE1897B5A100CA6E79 /* ACCommonFemaleNameSet.h */, 397 | 51DE64EF1897B5A100CA6E79 /* ACCommonFemaleNameSet.m */, 398 | ); 399 | path = Name; 400 | sourceTree = ""; 401 | }; 402 | 5145DC2E189775DC007B97E6 /* DataSet */ = { 403 | isa = PBXGroup; 404 | children = ( 405 | 5145DC2F189775DC007B97E6 /* ACPersonSetTests.m */, 406 | 5145DC30189775DC007B97E6 /* Image */, 407 | 5145DC34189775DC007B97E6 /* Name */, 408 | ); 409 | path = DataSet; 410 | sourceTree = ""; 411 | }; 412 | 5145DC30189775DC007B97E6 /* Image */ = { 413 | isa = PBXGroup; 414 | children = ( 415 | 5145DC31189775DC007B97E6 /* ACImageSetTests.m */, 416 | 5145DC32189775DC007B97E6 /* UIImage+pixelColor.h */, 417 | 5145DC33189775DC007B97E6 /* UIImage+pixelColor.m */, 418 | ); 419 | path = Image; 420 | sourceTree = ""; 421 | }; 422 | 5145DC34189775DC007B97E6 /* Name */ = { 423 | isa = PBXGroup; 424 | children = ( 425 | 5145DC35189775DC007B97E6 /* ACNameSetTests.m */, 426 | 5145DC36189775DC007B97E6 /* NSCharacterSet_NSSetTest.m */, 427 | 5145DC37189775DC007B97E6 /* NSString_RandomTests.m */, 428 | ); 429 | path = Name; 430 | sourceTree = ""; 431 | }; 432 | /* End PBXGroup section */ 433 | 434 | /* Begin PBXLegacyTarget section */ 435 | 51DE6498189792B100CA6E79 /* Documentation */ = { 436 | isa = PBXLegacyTarget; 437 | buildArgumentsString = "--project-name \"PopulateKit\"\n--project-company \"Arnaud Coomans\"\n--company-id \"com.acoomans\"\n--output build\n--create-docset \n--install-docset \n--create-html \n--exit-threshold 2 \n--no-repeat-first-par \n."; 438 | buildConfigurationList = 51DE649B189792B100CA6E79 /* Build configuration list for PBXLegacyTarget "Documentation" */; 439 | buildPhases = ( 440 | ); 441 | buildToolPath = /usr/local/bin/appledoc; 442 | buildWorkingDirectory = PopulateKit; 443 | dependencies = ( 444 | ); 445 | name = Documentation; 446 | passBuildSettingsInEnvironment = 1; 447 | productName = Documentation; 448 | }; 449 | /* End PBXLegacyTarget section */ 450 | 451 | /* Begin PBXNativeTarget section */ 452 | 5145DB791897392F007B97E6 /* Populate */ = { 453 | isa = PBXNativeTarget; 454 | buildConfigurationList = 5145DBAC1897392F007B97E6 /* Build configuration list for PBXNativeTarget "Populate" */; 455 | buildPhases = ( 456 | 5145DB761897392F007B97E6 /* Sources */, 457 | 5145DB771897392F007B97E6 /* Frameworks */, 458 | 5145DB781897392F007B97E6 /* Resources */, 459 | ); 460 | buildRules = ( 461 | ); 462 | dependencies = ( 463 | ); 464 | name = Populate; 465 | productName = Populate; 466 | productReference = 5145DB7A1897392F007B97E6 /* Populate.app */; 467 | productType = "com.apple.product-type.application"; 468 | }; 469 | 5145DB9A1897392F007B97E6 /* PopulateTests */ = { 470 | isa = PBXNativeTarget; 471 | buildConfigurationList = 5145DBAF1897392F007B97E6 /* Build configuration list for PBXNativeTarget "PopulateTests" */; 472 | buildPhases = ( 473 | 5145DB971897392F007B97E6 /* Sources */, 474 | 5145DB981897392F007B97E6 /* Frameworks */, 475 | 5145DB991897392F007B97E6 /* Resources */, 476 | ); 477 | buildRules = ( 478 | ); 479 | dependencies = ( 480 | 5145DBA11897392F007B97E6 /* PBXTargetDependency */, 481 | ); 482 | name = PopulateTests; 483 | productName = PopulateTests; 484 | productReference = 5145DB9B1897392F007B97E6 /* PopulateTests.xctest */; 485 | productType = "com.apple.product-type.bundle.unit-test"; 486 | }; 487 | 5145DBB518973A74007B97E6 /* PopulateKit */ = { 488 | isa = PBXNativeTarget; 489 | buildConfigurationList = 5145DBD218973A74007B97E6 /* Build configuration list for PBXNativeTarget "PopulateKit" */; 490 | buildPhases = ( 491 | 47858D37E307481BABF618AF /* Check Pods Manifest.lock */, 492 | 5145DBB218973A74007B97E6 /* Sources */, 493 | 5145DBB318973A74007B97E6 /* Frameworks */, 494 | 5145DBB418973A74007B97E6 /* CopyFiles */, 495 | 96D0F4A7EB464050986EF56C /* Copy Pods Resources */, 496 | ); 497 | buildRules = ( 498 | ); 499 | dependencies = ( 500 | ); 501 | name = PopulateKit; 502 | productName = PopulateKit; 503 | productReference = 5145DBB618973A74007B97E6 /* libPopulateKit.a */; 504 | productType = "com.apple.product-type.library.static"; 505 | }; 506 | 5145DBC218973A74007B97E6 /* PopulateKitTests */ = { 507 | isa = PBXNativeTarget; 508 | buildConfigurationList = 5145DBD518973A74007B97E6 /* Build configuration list for PBXNativeTarget "PopulateKitTests" */; 509 | buildPhases = ( 510 | 5145DBBF18973A74007B97E6 /* Sources */, 511 | 5145DBC018973A74007B97E6 /* Frameworks */, 512 | 5145DBC118973A74007B97E6 /* Resources */, 513 | ); 514 | buildRules = ( 515 | ); 516 | dependencies = ( 517 | 5145DBC818973A74007B97E6 /* PBXTargetDependency */, 518 | ); 519 | name = PopulateKitTests; 520 | productName = PopulateKitTests; 521 | productReference = 5145DBC318973A74007B97E6 /* PopulateKitTests.xctest */; 522 | productType = "com.apple.product-type.bundle.unit-test"; 523 | }; 524 | /* End PBXNativeTarget section */ 525 | 526 | /* Begin PBXProject section */ 527 | 5145DB721897392F007B97E6 /* Project object */ = { 528 | isa = PBXProject; 529 | attributes = { 530 | CLASSPREFIX = AC; 531 | LastUpgradeCheck = 0500; 532 | ORGANIZATIONNAME = "Arnaud Coomans"; 533 | TargetAttributes = { 534 | 5145DB9A1897392F007B97E6 = { 535 | TestTargetID = 5145DB791897392F007B97E6; 536 | }; 537 | 5145DBC218973A74007B97E6 = { 538 | TestTargetID = 5145DBB518973A74007B97E6; 539 | }; 540 | }; 541 | }; 542 | buildConfigurationList = 5145DB751897392F007B97E6 /* Build configuration list for PBXProject "Populate" */; 543 | compatibilityVersion = "Xcode 3.2"; 544 | developmentRegion = English; 545 | hasScannedForEncodings = 0; 546 | knownRegions = ( 547 | en, 548 | Base, 549 | ); 550 | mainGroup = 5145DB711897392F007B97E6; 551 | productRefGroup = 5145DB7B1897392F007B97E6 /* Products */; 552 | projectDirPath = ""; 553 | projectRoot = ""; 554 | targets = ( 555 | 5145DB791897392F007B97E6 /* Populate */, 556 | 5145DB9A1897392F007B97E6 /* PopulateTests */, 557 | 5145DBB518973A74007B97E6 /* PopulateKit */, 558 | 5145DBC218973A74007B97E6 /* PopulateKitTests */, 559 | 51DE6498189792B100CA6E79 /* Documentation */, 560 | ); 561 | }; 562 | /* End PBXProject section */ 563 | 564 | /* Begin PBXResourcesBuildPhase section */ 565 | 5145DB781897392F007B97E6 /* Resources */ = { 566 | isa = PBXResourcesBuildPhase; 567 | buildActionMask = 2147483647; 568 | files = ( 569 | 51DE64EC1897ABE700CA6E79 /* PopulateKit.bundle in Resources */, 570 | 5145DB961897392F007B97E6 /* Images.xcassets in Resources */, 571 | 5145DB881897392F007B97E6 /* InfoPlist.strings in Resources */, 572 | 5145DB911897392F007B97E6 /* Main.storyboard in Resources */, 573 | ); 574 | runOnlyForDeploymentPostprocessing = 0; 575 | }; 576 | 5145DB991897392F007B97E6 /* Resources */ = { 577 | isa = PBXResourcesBuildPhase; 578 | buildActionMask = 2147483647; 579 | files = ( 580 | 5145DBA71897392F007B97E6 /* InfoPlist.strings in Resources */, 581 | ); 582 | runOnlyForDeploymentPostprocessing = 0; 583 | }; 584 | 5145DBC118973A74007B97E6 /* Resources */ = { 585 | isa = PBXResourcesBuildPhase; 586 | buildActionMask = 2147483647; 587 | files = ( 588 | 51DE64ED1897AD8500CA6E79 /* PopulateKit.bundle in Resources */, 589 | 5145DBCF18973A74007B97E6 /* InfoPlist.strings in Resources */, 590 | ); 591 | runOnlyForDeploymentPostprocessing = 0; 592 | }; 593 | /* End PBXResourcesBuildPhase section */ 594 | 595 | /* Begin PBXShellScriptBuildPhase section */ 596 | 47858D37E307481BABF618AF /* Check Pods Manifest.lock */ = { 597 | isa = PBXShellScriptBuildPhase; 598 | buildActionMask = 2147483647; 599 | files = ( 600 | ); 601 | inputPaths = ( 602 | ); 603 | name = "Check Pods Manifest.lock"; 604 | outputPaths = ( 605 | ); 606 | runOnlyForDeploymentPostprocessing = 0; 607 | shellPath = /bin/sh; 608 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 609 | showEnvVarsInLog = 0; 610 | }; 611 | 96D0F4A7EB464050986EF56C /* Copy Pods Resources */ = { 612 | isa = PBXShellScriptBuildPhase; 613 | buildActionMask = 2147483647; 614 | files = ( 615 | ); 616 | inputPaths = ( 617 | ); 618 | name = "Copy Pods Resources"; 619 | outputPaths = ( 620 | ); 621 | runOnlyForDeploymentPostprocessing = 0; 622 | shellPath = /bin/sh; 623 | shellScript = "\"${SRCROOT}/Pods/Pods-resources.sh\"\n"; 624 | showEnvVarsInLog = 0; 625 | }; 626 | /* End PBXShellScriptBuildPhase section */ 627 | 628 | /* Begin PBXSourcesBuildPhase section */ 629 | 5145DB761897392F007B97E6 /* Sources */ = { 630 | isa = PBXSourcesBuildPhase; 631 | buildActionMask = 2147483647; 632 | files = ( 633 | 5145DB8E1897392F007B97E6 /* ACAppDelegate.m in Sources */, 634 | 5145DB941897392F007B97E6 /* ACPopulateViewController.m in Sources */, 635 | 5145DB8A1897392F007B97E6 /* main.m in Sources */, 636 | ); 637 | runOnlyForDeploymentPostprocessing = 0; 638 | }; 639 | 5145DB971897392F007B97E6 /* Sources */ = { 640 | isa = PBXSourcesBuildPhase; 641 | buildActionMask = 2147483647; 642 | files = ( 643 | 5145DBA91897392F007B97E6 /* PopulateTests.m in Sources */, 644 | ); 645 | runOnlyForDeploymentPostprocessing = 0; 646 | }; 647 | 5145DBB218973A74007B97E6 /* Sources */ = { 648 | isa = PBXSourcesBuildPhase; 649 | buildActionMask = 2147483647; 650 | files = ( 651 | 5145DC1C1897732D007B97E6 /* NSString+Random.m in Sources */, 652 | 5145DBEE189753F2007B97E6 /* ACPerson.m in Sources */, 653 | 51DE64F61897B9A700CA6E79 /* ACMaleFaceImageSet.m in Sources */, 654 | 51DE64EA1897A90A00CA6E79 /* ACCommonSurnameSet.m in Sources */, 655 | 5145DC161897732D007B97E6 /* ACNameSet.m in Sources */, 656 | 51DE64F91897C05A00CA6E79 /* ACFemaleFaceImageSet.m in Sources */, 657 | 5145DC151897732D007B97E6 /* UIImage+Random.m in Sources */, 658 | 51DE64F01897B5A100CA6E79 /* ACCommonFemaleNameSet.m in Sources */, 659 | 5145DC1A1897732D007B97E6 /* ACRandomNameSet.m in Sources */, 660 | 5145DC121897732D007B97E6 /* ACImageSet.m in Sources */, 661 | 5145DC101897732D007B97E6 /* ACPersonSet.m in Sources */, 662 | 51DE64F31897B6C500CA6E79 /* ACCommonMaleNameSet.m in Sources */, 663 | 5145DBBE18973A74007B97E6 /* ACPopulate.m in Sources */, 664 | 5145DC141897732D007B97E6 /* ACRandomColorImageSet.m in Sources */, 665 | 5145DC1D1897732D007B97E6 /* NSString+Randomized.m in Sources */, 666 | 5145DC1B1897732D007B97E6 /* NSCharacterSet+NSSet.m in Sources */, 667 | 5145DBED189753F2007B97E6 /* ACAddressBook.m in Sources */, 668 | 51DE64E71897A57600CA6E79 /* ACIdenticonImageSet.m in Sources */, 669 | ); 670 | runOnlyForDeploymentPostprocessing = 0; 671 | }; 672 | 5145DBBF18973A74007B97E6 /* Sources */ = { 673 | isa = PBXSourcesBuildPhase; 674 | buildActionMask = 2147483647; 675 | files = ( 676 | 5145DC3D189775DC007B97E6 /* NSString_RandomTests.m in Sources */, 677 | 5145DC3A189775DC007B97E6 /* UIImage+pixelColor.m in Sources */, 678 | 5145DC39189775DC007B97E6 /* ACImageSetTests.m in Sources */, 679 | 5145DC3B189775DC007B97E6 /* ACNameSetTests.m in Sources */, 680 | 5145DBD118973A74007B97E6 /* PopulateKitTests.m in Sources */, 681 | 5145DC38189775DC007B97E6 /* ACPersonSetTests.m in Sources */, 682 | 5145DC3C189775DC007B97E6 /* NSCharacterSet_NSSetTest.m in Sources */, 683 | ); 684 | runOnlyForDeploymentPostprocessing = 0; 685 | }; 686 | /* End PBXSourcesBuildPhase section */ 687 | 688 | /* Begin PBXTargetDependency section */ 689 | 5145DBA11897392F007B97E6 /* PBXTargetDependency */ = { 690 | isa = PBXTargetDependency; 691 | target = 5145DB791897392F007B97E6 /* Populate */; 692 | targetProxy = 5145DBA01897392F007B97E6 /* PBXContainerItemProxy */; 693 | }; 694 | 5145DBC818973A74007B97E6 /* PBXTargetDependency */ = { 695 | isa = PBXTargetDependency; 696 | target = 5145DBB518973A74007B97E6 /* PopulateKit */; 697 | targetProxy = 5145DBC718973A74007B97E6 /* PBXContainerItemProxy */; 698 | }; 699 | /* End PBXTargetDependency section */ 700 | 701 | /* Begin PBXVariantGroup section */ 702 | 5145DB861897392F007B97E6 /* InfoPlist.strings */ = { 703 | isa = PBXVariantGroup; 704 | children = ( 705 | 5145DB871897392F007B97E6 /* en */, 706 | ); 707 | name = InfoPlist.strings; 708 | sourceTree = ""; 709 | }; 710 | 5145DB8F1897392F007B97E6 /* Main.storyboard */ = { 711 | isa = PBXVariantGroup; 712 | children = ( 713 | 5145DB901897392F007B97E6 /* Base */, 714 | ); 715 | name = Main.storyboard; 716 | sourceTree = ""; 717 | }; 718 | 5145DBA51897392F007B97E6 /* InfoPlist.strings */ = { 719 | isa = PBXVariantGroup; 720 | children = ( 721 | 5145DBA61897392F007B97E6 /* en */, 722 | ); 723 | name = InfoPlist.strings; 724 | sourceTree = ""; 725 | }; 726 | 5145DBCD18973A74007B97E6 /* InfoPlist.strings */ = { 727 | isa = PBXVariantGroup; 728 | children = ( 729 | 5145DBCE18973A74007B97E6 /* en */, 730 | ); 731 | name = InfoPlist.strings; 732 | sourceTree = ""; 733 | }; 734 | /* End PBXVariantGroup section */ 735 | 736 | /* Begin XCBuildConfiguration section */ 737 | 5145DBAA1897392F007B97E6 /* Debug */ = { 738 | isa = XCBuildConfiguration; 739 | buildSettings = { 740 | ALWAYS_SEARCH_USER_PATHS = NO; 741 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 742 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 743 | CLANG_CXX_LIBRARY = "libc++"; 744 | CLANG_ENABLE_MODULES = YES; 745 | CLANG_ENABLE_OBJC_ARC = YES; 746 | CLANG_WARN_BOOL_CONVERSION = YES; 747 | CLANG_WARN_CONSTANT_CONVERSION = YES; 748 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 749 | CLANG_WARN_EMPTY_BODY = YES; 750 | CLANG_WARN_ENUM_CONVERSION = YES; 751 | CLANG_WARN_INT_CONVERSION = YES; 752 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 753 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 754 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 755 | COPY_PHASE_STRIP = NO; 756 | GCC_C_LANGUAGE_STANDARD = gnu99; 757 | GCC_DYNAMIC_NO_PIC = NO; 758 | GCC_OPTIMIZATION_LEVEL = 0; 759 | GCC_PREPROCESSOR_DEFINITIONS = ( 760 | "DEBUG=1", 761 | "$(inherited)", 762 | ); 763 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 764 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 765 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 766 | GCC_WARN_UNDECLARED_SELECTOR = YES; 767 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 768 | GCC_WARN_UNUSED_FUNCTION = YES; 769 | GCC_WARN_UNUSED_VARIABLE = YES; 770 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 771 | ONLY_ACTIVE_ARCH = YES; 772 | SDKROOT = iphoneos; 773 | }; 774 | name = Debug; 775 | }; 776 | 5145DBAB1897392F007B97E6 /* Release */ = { 777 | isa = XCBuildConfiguration; 778 | buildSettings = { 779 | ALWAYS_SEARCH_USER_PATHS = NO; 780 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 781 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 782 | CLANG_CXX_LIBRARY = "libc++"; 783 | CLANG_ENABLE_MODULES = YES; 784 | CLANG_ENABLE_OBJC_ARC = YES; 785 | CLANG_WARN_BOOL_CONVERSION = YES; 786 | CLANG_WARN_CONSTANT_CONVERSION = YES; 787 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 788 | CLANG_WARN_EMPTY_BODY = YES; 789 | CLANG_WARN_ENUM_CONVERSION = YES; 790 | CLANG_WARN_INT_CONVERSION = YES; 791 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 792 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 793 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 794 | COPY_PHASE_STRIP = YES; 795 | ENABLE_NS_ASSERTIONS = NO; 796 | GCC_C_LANGUAGE_STANDARD = gnu99; 797 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 798 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 799 | GCC_WARN_UNDECLARED_SELECTOR = YES; 800 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 801 | GCC_WARN_UNUSED_FUNCTION = YES; 802 | GCC_WARN_UNUSED_VARIABLE = YES; 803 | IPHONEOS_DEPLOYMENT_TARGET = 7.0; 804 | SDKROOT = iphoneos; 805 | VALIDATE_PRODUCT = YES; 806 | }; 807 | name = Release; 808 | }; 809 | 5145DBAD1897392F007B97E6 /* Debug */ = { 810 | isa = XCBuildConfiguration; 811 | buildSettings = { 812 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 813 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 814 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 815 | GCC_PREFIX_HEADER = "Populate/Populate-Prefix.pch"; 816 | INFOPLIST_FILE = "Populate/Populate-Info.plist"; 817 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 818 | OTHER_LDFLAGS = "-ObjC"; 819 | PRODUCT_NAME = "$(TARGET_NAME)"; 820 | WRAPPER_EXTENSION = app; 821 | }; 822 | name = Debug; 823 | }; 824 | 5145DBAE1897392F007B97E6 /* Release */ = { 825 | isa = XCBuildConfiguration; 826 | buildSettings = { 827 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 828 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 829 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 830 | GCC_PREFIX_HEADER = "Populate/Populate-Prefix.pch"; 831 | INFOPLIST_FILE = "Populate/Populate-Info.plist"; 832 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 833 | OTHER_LDFLAGS = "-ObjC"; 834 | PRODUCT_NAME = "$(TARGET_NAME)"; 835 | WRAPPER_EXTENSION = app; 836 | }; 837 | name = Release; 838 | }; 839 | 5145DBB01897392F007B97E6 /* Debug */ = { 840 | isa = XCBuildConfiguration; 841 | buildSettings = { 842 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 843 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Populate.app/Populate"; 844 | FRAMEWORK_SEARCH_PATHS = ( 845 | "$(SDKROOT)/Developer/Library/Frameworks", 846 | "$(inherited)", 847 | "$(DEVELOPER_FRAMEWORKS_DIR)", 848 | ); 849 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 850 | GCC_PREFIX_HEADER = "Populate/Populate-Prefix.pch"; 851 | GCC_PREPROCESSOR_DEFINITIONS = ( 852 | "DEBUG=1", 853 | "$(inherited)", 854 | ); 855 | INFOPLIST_FILE = "PopulateTests/PopulateTests-Info.plist"; 856 | PRODUCT_NAME = "$(TARGET_NAME)"; 857 | TEST_HOST = "$(BUNDLE_LOADER)"; 858 | WRAPPER_EXTENSION = xctest; 859 | }; 860 | name = Debug; 861 | }; 862 | 5145DBB11897392F007B97E6 /* Release */ = { 863 | isa = XCBuildConfiguration; 864 | buildSettings = { 865 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 866 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Populate.app/Populate"; 867 | FRAMEWORK_SEARCH_PATHS = ( 868 | "$(SDKROOT)/Developer/Library/Frameworks", 869 | "$(inherited)", 870 | "$(DEVELOPER_FRAMEWORKS_DIR)", 871 | ); 872 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 873 | GCC_PREFIX_HEADER = "Populate/Populate-Prefix.pch"; 874 | INFOPLIST_FILE = "PopulateTests/PopulateTests-Info.plist"; 875 | PRODUCT_NAME = "$(TARGET_NAME)"; 876 | TEST_HOST = "$(BUNDLE_LOADER)"; 877 | WRAPPER_EXTENSION = xctest; 878 | }; 879 | name = Release; 880 | }; 881 | 5145DBD318973A74007B97E6 /* Debug */ = { 882 | isa = XCBuildConfiguration; 883 | baseConfigurationReference = 17083C894B4242C4AD10962C /* Pods.xcconfig */; 884 | buildSettings = { 885 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 886 | DSTROOT = /tmp/PopulateKit.dst; 887 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 888 | GCC_PREFIX_HEADER = "PopulateKit/PopulateKit-Prefix.pch"; 889 | GCC_PREPROCESSOR_DEFINITIONS = ( 890 | "DEBUG=1", 891 | "$(inherited)", 892 | ); 893 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 894 | OTHER_LDFLAGS = "-ObjC"; 895 | PRODUCT_NAME = "$(TARGET_NAME)"; 896 | SKIP_INSTALL = YES; 897 | }; 898 | name = Debug; 899 | }; 900 | 5145DBD418973A74007B97E6 /* Release */ = { 901 | isa = XCBuildConfiguration; 902 | baseConfigurationReference = 17083C894B4242C4AD10962C /* Pods.xcconfig */; 903 | buildSettings = { 904 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 905 | DSTROOT = /tmp/PopulateKit.dst; 906 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 907 | GCC_PREFIX_HEADER = "PopulateKit/PopulateKit-Prefix.pch"; 908 | IPHONEOS_DEPLOYMENT_TARGET = 6.1; 909 | OTHER_LDFLAGS = "-ObjC"; 910 | PRODUCT_NAME = "$(TARGET_NAME)"; 911 | SKIP_INSTALL = YES; 912 | }; 913 | name = Release; 914 | }; 915 | 5145DBD618973A74007B97E6 /* Debug */ = { 916 | isa = XCBuildConfiguration; 917 | buildSettings = { 918 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 919 | FRAMEWORK_SEARCH_PATHS = ( 920 | "$(SDKROOT)/Developer/Library/Frameworks", 921 | "$(inherited)", 922 | "$(DEVELOPER_FRAMEWORKS_DIR)", 923 | ); 924 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 925 | GCC_PREFIX_HEADER = "PopulateKit/PopulateKit-Prefix.pch"; 926 | GCC_PREPROCESSOR_DEFINITIONS = ( 927 | "DEBUG=1", 928 | "$(inherited)", 929 | ); 930 | INFOPLIST_FILE = "PopulateKitTests/PopulateKitTests-Info.plist"; 931 | OTHER_LDFLAGS = ( 932 | "$(inherited)", 933 | "-framework", 934 | XCTest, 935 | "-ObjC", 936 | ); 937 | PRODUCT_NAME = "$(TARGET_NAME)"; 938 | WRAPPER_EXTENSION = xctest; 939 | }; 940 | name = Debug; 941 | }; 942 | 5145DBD718973A74007B97E6 /* Release */ = { 943 | isa = XCBuildConfiguration; 944 | buildSettings = { 945 | ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)"; 946 | FRAMEWORK_SEARCH_PATHS = ( 947 | "$(SDKROOT)/Developer/Library/Frameworks", 948 | "$(inherited)", 949 | "$(DEVELOPER_FRAMEWORKS_DIR)", 950 | ); 951 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 952 | GCC_PREFIX_HEADER = "PopulateKit/PopulateKit-Prefix.pch"; 953 | INFOPLIST_FILE = "PopulateKitTests/PopulateKitTests-Info.plist"; 954 | OTHER_LDFLAGS = ( 955 | "$(inherited)", 956 | "-framework", 957 | XCTest, 958 | "-ObjC", 959 | ); 960 | PRODUCT_NAME = "$(TARGET_NAME)"; 961 | WRAPPER_EXTENSION = xctest; 962 | }; 963 | name = Release; 964 | }; 965 | 51DE6499189792B100CA6E79 /* Debug */ = { 966 | isa = XCBuildConfiguration; 967 | buildSettings = { 968 | DEBUGGING_SYMBOLS = YES; 969 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 970 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 971 | GCC_OPTIMIZATION_LEVEL = 0; 972 | GCC_PREPROCESSOR_DEFINITIONS = ( 973 | "DEBUG=1", 974 | "$(inherited)", 975 | ); 976 | MACOSX_DEPLOYMENT_TARGET = 10.9; 977 | OTHER_CFLAGS = ""; 978 | OTHER_LDFLAGS = ""; 979 | PRODUCT_NAME = "$(TARGET_NAME)"; 980 | SDKROOT = macosx; 981 | }; 982 | name = Debug; 983 | }; 984 | 51DE649A189792B100CA6E79 /* Release */ = { 985 | isa = XCBuildConfiguration; 986 | buildSettings = { 987 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 988 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 989 | MACOSX_DEPLOYMENT_TARGET = 10.9; 990 | OTHER_CFLAGS = ""; 991 | OTHER_LDFLAGS = ""; 992 | PRODUCT_NAME = "$(TARGET_NAME)"; 993 | SDKROOT = macosx; 994 | }; 995 | name = Release; 996 | }; 997 | /* End XCBuildConfiguration section */ 998 | 999 | /* Begin XCConfigurationList section */ 1000 | 5145DB751897392F007B97E6 /* Build configuration list for PBXProject "Populate" */ = { 1001 | isa = XCConfigurationList; 1002 | buildConfigurations = ( 1003 | 5145DBAA1897392F007B97E6 /* Debug */, 1004 | 5145DBAB1897392F007B97E6 /* Release */, 1005 | ); 1006 | defaultConfigurationIsVisible = 0; 1007 | defaultConfigurationName = Release; 1008 | }; 1009 | 5145DBAC1897392F007B97E6 /* Build configuration list for PBXNativeTarget "Populate" */ = { 1010 | isa = XCConfigurationList; 1011 | buildConfigurations = ( 1012 | 5145DBAD1897392F007B97E6 /* Debug */, 1013 | 5145DBAE1897392F007B97E6 /* Release */, 1014 | ); 1015 | defaultConfigurationIsVisible = 0; 1016 | defaultConfigurationName = Release; 1017 | }; 1018 | 5145DBAF1897392F007B97E6 /* Build configuration list for PBXNativeTarget "PopulateTests" */ = { 1019 | isa = XCConfigurationList; 1020 | buildConfigurations = ( 1021 | 5145DBB01897392F007B97E6 /* Debug */, 1022 | 5145DBB11897392F007B97E6 /* Release */, 1023 | ); 1024 | defaultConfigurationIsVisible = 0; 1025 | defaultConfigurationName = Release; 1026 | }; 1027 | 5145DBD218973A74007B97E6 /* Build configuration list for PBXNativeTarget "PopulateKit" */ = { 1028 | isa = XCConfigurationList; 1029 | buildConfigurations = ( 1030 | 5145DBD318973A74007B97E6 /* Debug */, 1031 | 5145DBD418973A74007B97E6 /* Release */, 1032 | ); 1033 | defaultConfigurationIsVisible = 0; 1034 | defaultConfigurationName = Release; 1035 | }; 1036 | 5145DBD518973A74007B97E6 /* Build configuration list for PBXNativeTarget "PopulateKitTests" */ = { 1037 | isa = XCConfigurationList; 1038 | buildConfigurations = ( 1039 | 5145DBD618973A74007B97E6 /* Debug */, 1040 | 5145DBD718973A74007B97E6 /* Release */, 1041 | ); 1042 | defaultConfigurationIsVisible = 0; 1043 | defaultConfigurationName = Release; 1044 | }; 1045 | 51DE649B189792B100CA6E79 /* Build configuration list for PBXLegacyTarget "Documentation" */ = { 1046 | isa = XCConfigurationList; 1047 | buildConfigurations = ( 1048 | 51DE6499189792B100CA6E79 /* Debug */, 1049 | 51DE649A189792B100CA6E79 /* Release */, 1050 | ); 1051 | defaultConfigurationIsVisible = 0; 1052 | defaultConfigurationName = Release; 1053 | }; 1054 | /* End XCConfigurationList section */ 1055 | }; 1056 | rootObject = 5145DB721897392F007B97E6 /* Project object */; 1057 | } 1058 | --------------------------------------------------------------------------------