├── 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 | [](https://api.travis-ci.org/acoomans/Populate.png)
10 | [](http://beta.cocoapods.org/?q=on%3Aios%20name%3APopulateKit%2A)
11 | [](http://beta.cocoapods.org/?q=on%3Aios%20name%3APopulateKit%2A)
12 |
13 |
14 | ## Screenshots
15 |
16 | 
17 |
18 | 
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 |
--------------------------------------------------------------------------------