From 7c2a051240177dee9443efa42cc8ba94b8639afd Mon Sep 17 00:00:00 2001 From: Gilad Gurantz Date: Fri, 9 Oct 2015 18:38:53 -0700 Subject: [PATCH 1/2] Set access even when the ABAddressBookRef isn't initialized --- Pod/Core/Public/APAddressBook.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Pod/Core/Public/APAddressBook.m b/Pod/Core/Public/APAddressBook.m index 909b329..2fd654b 100755 --- a/Pod/Core/Public/APAddressBook.m +++ b/Pod/Core/Public/APAddressBook.m @@ -36,9 +36,9 @@ - (id)init [self.thread dispatchAsync:^ { APAddressBookRefWrapper *refWrapper = [[APAddressBookRefWrapper alloc] init]; + self.access = [[APAddressBookAccessRoutine alloc] initWithAddressBookRefWrapper:refWrapper]; if (!refWrapper.error) { - self.access = [[APAddressBookAccessRoutine alloc] initWithAddressBookRefWrapper:refWrapper]; self.contacts = [[APAddressBookContactsRoutine alloc] initWithAddressBookRefWrapper:refWrapper]; self.externalChange = [[APAddressBookExternalChangeRoutine alloc] initWithAddressBookRefWrapper:refWrapper]; self.externalChange.delegate = self; From de07649e1ae718bba48f384ab5705e88b4cb3ec0 Mon Sep 17 00:00:00 2001 From: Alexey Belkevich Date: Mon, 12 Oct 2015 13:38:45 +0300 Subject: [PATCH 2/2] Refactored contact list building --- .../AddressBook.xcodeproj/project.pbxproj | 20 +- .../AddressBook.xcodeproj/project.pbxproj | 356 +++++++++--------- .../Private/Builders/APContactListBuilder.h | 20 + .../Private/Builders/APContactListBuilder.m | 47 +++ .../Categories/NSArray+APAddressBook.h | 18 - .../Categories/NSArray+APAddressBook.m | 39 -- .../Routine/APAddressBookContactsRoutine.m | 2 +- Pod/Core/Public/APAddressBook.m | 12 +- Pod/Core/Public/Models/APContact.h | 19 +- 9 files changed, 263 insertions(+), 270 deletions(-) create mode 100644 Pod/Core/Private/Builders/APContactListBuilder.h create mode 100644 Pod/Core/Private/Builders/APContactListBuilder.m delete mode 100644 Pod/Core/Private/Categories/NSArray+APAddressBook.h delete mode 100644 Pod/Core/Private/Categories/NSArray+APAddressBook.m diff --git a/Example/Objective-C/AddressBook.xcodeproj/project.pbxproj b/Example/Objective-C/AddressBook.xcodeproj/project.pbxproj index b00d1a8..60151ab 100644 --- a/Example/Objective-C/AddressBook.xcodeproj/project.pbxproj +++ b/Example/Objective-C/AddressBook.xcodeproj/project.pbxproj @@ -19,7 +19,7 @@ 2DBA161F7922FC8733E39BDF /* APSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1F7630DA6BBFED5D6526 /* APSource.m */; }; 2DBA18949A6B5C9961D5548E /* APJob.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA18DB68FD0D9308AE70F7 /* APJob.m */; }; 2DBA18FC2FF7F4AE18208C23 /* APAddressBookBaseRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA14AE247588EB09FCB705 /* APAddressBookBaseRoutine.m */; }; - 2DBA1A57B40D47C26F1FC2EA /* NSArray+APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA163CB64937C13056022E /* NSArray+APAddressBook.m */; }; + 2DBA193C7A6E4AF64D50C7E9 /* APContactListBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1DD6DF0D8A85F333FBD3 /* APContactListBuilder.m */; }; 2DBA1B499F669F228CB6B1AE /* APAddressBookExternalChangeRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA15D1186A313346545E82 /* APAddressBookExternalChangeRoutine.m */; }; 2DBA1C01BE35D5D6CC6DEE99 /* APRecordDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA19D573D9CD2762141F22 /* APRecordDate.m */; }; 2DBA1C26ABD2B795F598BD28 /* APAddressBookContactsRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA158EF117E2D3DBBB673B /* APAddressBookContactsRoutine.m */; }; @@ -50,7 +50,6 @@ 2DBA10804A06D410681819BD /* APAddress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddress.m; sourceTree = ""; }; 2DBA11586D1BD36B84E8D9B0 /* APAddressBookAccessRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookAccessRoutine.h; sourceTree = ""; }; 2DBA11ABCAF3BCAD3D9B4E0D /* APImageExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APImageExtractor.h; sourceTree = ""; }; - 2DBA11E92C0A7C2973BD787B /* NSArray+APAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+APAddressBook.h"; sourceTree = ""; }; 2DBA12274B8BFA605F110B91 /* APAddressBookAccessRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookAccessRoutine.m; sourceTree = ""; }; 2DBA125B051EE9D46F45C505 /* APThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APThread.m; sourceTree = ""; }; 2DBA12CDF576C49EAEB83108 /* APPhone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APPhone.h; sourceTree = ""; }; @@ -66,7 +65,6 @@ 2DBA15A68FC48C856C3091A4 /* APAddressBookContactsRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookContactsRoutine.h; sourceTree = ""; }; 2DBA15D1186A313346545E82 /* APAddressBookExternalChangeRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookExternalChangeRoutine.m; sourceTree = ""; }; 2DBA161642CBB5F0613EABC7 /* APTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APTypes.h; sourceTree = ""; }; - 2DBA163CB64937C13056022E /* NSArray+APAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+APAddressBook.m"; sourceTree = ""; }; 2DBA16AB38312AA9DDBD1F1F /* APAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddress.h; sourceTree = ""; }; 2DBA177D8A97E956227330AA /* APImageExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APImageExtractor.m; sourceTree = ""; }; 2DBA1825CB9083C503993480 /* APSocialProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialProfile.m; sourceTree = ""; }; @@ -79,6 +77,7 @@ 2DBA19EA7D800550FD7BB39A /* APSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSource.h; sourceTree = ""; }; 2DBA1A1320B550F8D7A58ED9 /* APAddressBookRefWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookRefWrapper.h; sourceTree = ""; }; 2DBA1A4059663C23270F830C /* APAddressBookExternalChangeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeDelegate.h; sourceTree = ""; }; + 2DBA1AA5BC66025B63082209 /* APContactListBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactListBuilder.h; sourceTree = ""; }; 2DBA1AB470DEA08ACCE65F4A /* APPhone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APPhone.m; sourceTree = ""; }; 2DBA1AB6C60DBBA93605DCBF /* APAddressBookExternalChangeRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeRoutine.h; sourceTree = ""; }; 2DBA1ABCD1751A594F2325F5 /* APSocialServiceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSocialServiceHelper.h; sourceTree = ""; }; @@ -88,6 +87,7 @@ 2DBA1CE66C6D93542A66D6CC /* APAddressBookRefWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookRefWrapper.m; sourceTree = ""; }; 2DBA1D50E367D26256BF6ACE /* APSocialServiceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialServiceHelper.m; sourceTree = ""; }; 2DBA1DD07C5A43B4DD3EA17A /* APContactBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactBuilder.h; sourceTree = ""; }; + 2DBA1DD6DF0D8A85F333FBD3 /* APContactListBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactListBuilder.m; sourceTree = ""; }; 2DBA1F4B68223450E5314F03 /* APRecordDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APRecordDate.h; sourceTree = ""; }; 2DBA1F7630DA6BBFED5D6526 /* APSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSource.m; sourceTree = ""; }; 2DBA1FA13BE5F98D4A810187 /* APName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APName.m; sourceTree = ""; }; @@ -164,15 +164,6 @@ path = Public; sourceTree = ""; }; - 2DBA1318F898D71A0C32328C /* Categories */ = { - isa = PBXGroup; - children = ( - 2DBA163CB64937C13056022E /* NSArray+APAddressBook.m */, - 2DBA11E92C0A7C2973BD787B /* NSArray+APAddressBook.h */, - ); - path = Categories; - sourceTree = ""; - }; 2DBA1693A4961B92662AFC34 /* Private */ = { isa = PBXGroup; children = ( @@ -180,7 +171,6 @@ 2DBA108E06803BCF75116A5F /* Routine */, 2DBA1A42129A602812F4B4E8 /* Builders */, 2DBA1705BC593F92C1870534 /* Wrapper */, - 2DBA1318F898D71A0C32328C /* Categories */, 2DBA17FB82D91E188A92BA0E /* Extractors */, 2DBA18B5003E6C7FB8A14478 /* Helpers */, ); @@ -221,6 +211,8 @@ children = ( 2DBA1DD07C5A43B4DD3EA17A /* APContactBuilder.h */, 2DBA10055B7C4CA15B752EE5 /* APContactBuilder.m */, + 2DBA1DD6DF0D8A85F333FBD3 /* APContactListBuilder.m */, + 2DBA1AA5BC66025B63082209 /* APContactListBuilder.h */, ); path = Builders; sourceTree = ""; @@ -512,7 +504,6 @@ 2DBA1B499F669F228CB6B1AE /* APAddressBookExternalChangeRoutine.m in Sources */, 2DBA137D3076D6E6FC78ABB9 /* APContactBuilder.m in Sources */, 2DBA1F30EEC9391D5B7D837B /* APAddressBookRefWrapper.m in Sources */, - 2DBA1A57B40D47C26F1FC2EA /* NSArray+APAddressBook.m in Sources */, 2DBA10B2D79BB0AB645BCED5 /* APContactDataExtractor.m in Sources */, 2DBA12ED1646227C60CFEB8A /* APSocialServiceHelper.m in Sources */, 2DBA161F7922FC8733E39BDF /* APSource.m in Sources */, @@ -522,6 +513,7 @@ 2DBA1F046B5BC47D436EE5F5 /* APName.m in Sources */, 2DBA18949A6B5C9961D5548E /* APJob.m in Sources */, 2DBA1C01BE35D5D6CC6DEE99 /* APRecordDate.m in Sources */, + 2DBA193C7A6E4AF64D50C7E9 /* APContactListBuilder.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Example/Swift/AddressBook.xcodeproj/project.pbxproj b/Example/Swift/AddressBook.xcodeproj/project.pbxproj index c5f9db2..3ef0dab 100644 --- a/Example/Swift/AddressBook.xcodeproj/project.pbxproj +++ b/Example/Swift/AddressBook.xcodeproj/project.pbxproj @@ -7,28 +7,28 @@ objects = { /* Begin PBXBuildFile section */ - 2DBA1016FFF055FF45A9055F /* APContactDataExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA12E240C11F068D413172 /* APContactDataExtractor.m */; }; - 2DBA10737FE3D78B376ECA63 /* APContactBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1604B89FECA28D63A4E1 /* APContactBuilder.m */; }; - 2DBA109D090690D1FFC475E1 /* NSArray+APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1F8EC05FD1E6B25610F8 /* NSArray+APAddressBook.m */; }; - 2DBA10BA949BD8EE94CE1B7F /* APSocialServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA10CD448035BCCF8CE18C /* APSocialServiceHelper.m */; }; - 2DBA12C009DF840FBF8B9814 /* APAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1F8E5321648E0D2FA935 /* APAddress.m */; }; - 2DBA14C1FDD7C0FCF2AA90CD /* APContact.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1AE391BBD61912B087DC /* APContact.m */; }; - 2DBA1510F4032ED6F7865F46 /* APRecordDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA16A1950DE98135C600D6 /* APRecordDate.m */; }; - 2DBA167261FFA4BBC45578CD /* APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA10BD5C043BD14272E54F /* APAddressBook.m */; }; - 2DBA16781C5DC6A96A2CFF52 /* APAddressBookContactsRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1BD363A9810C1245ABD2 /* APAddressBookContactsRoutine.m */; }; - 2DBA1698444FFC18865D3F8A /* APEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1369D8302D0C20720875 /* APEmail.m */; }; - 2DBA16BC6A2D5A26B09A35CB /* APAddressBookBaseRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA180DA420E18728FC4027 /* APAddressBookBaseRoutine.m */; }; - 2DBA16C1CB1EF01C1A9D7C4B /* APAddressBookAccessRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA16DA407D0A91F2841B76 /* APAddressBookAccessRoutine.m */; }; - 2DBA18D0F47A1B7C5A949975 /* APPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA17882043145CD3A50C80 /* APPhone.m */; }; - 2DBA1A57C7C32CE574FCBAA8 /* APThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA130FE5FE2BED92606430 /* APThread.m */; }; - 2DBA1C184E4D42C3554159FE /* APRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA11FD396A98F1816F9D9C /* APRelatedPerson.m */; }; - 2DBA1C1C26ADAA7E92CA8B2C /* APImageExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1840FDFEC835948E8807 /* APImageExtractor.m */; }; - 2DBA1D06B540412341183C26 /* APJob.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA12CAA85ADFA4C222ACB2 /* APJob.m */; }; - 2DBA1EBDD7AAA1F6DFCDA8C8 /* APSocialProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA19AED5CF3A6DF88298D6 /* APSocialProfile.m */; }; - 2DBA1ED5FF8BB0422251D099 /* APAddressBookExternalChangeRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1B612222E9AD4E6C8C88 /* APAddressBookExternalChangeRoutine.m */; }; - 2DBA1ED7FA65157CAFEE6AD6 /* APAddressBookRefWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA16351BA607C359F2FCB0 /* APAddressBookRefWrapper.m */; }; - 2DBA1FEA55E9F18B48D08744 /* APName.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1E30D2262D6633DBBC21 /* APName.m */; }; - 2DBA1FF448126E5A664886A6 /* APSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA15E1EA2F2E03F80B0F15 /* APSource.m */; }; + 2DBA103F266316AADDFA6CF6 /* APAddressBookBaseRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA191A407A17328EBCB862 /* APAddressBookBaseRoutine.m */; }; + 2DBA11C73DCD37CFA04EBA13 /* APAddressBookExternalChangeRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1653EB0073A06DB7FC01 /* APAddressBookExternalChangeRoutine.m */; }; + 2DBA11DB5C9ECF1F6A645F26 /* APImageExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA11BED4A45C6478130EDF /* APImageExtractor.m */; }; + 2DBA11E17A9ECE25A5344061 /* APJob.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA11A7E9C7D7D61F5D0F72 /* APJob.m */; }; + 2DBA143CADE9B17CDA427FD7 /* APContactDataExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA11A6158E80912C2417C0 /* APContactDataExtractor.m */; }; + 2DBA15FF889BC911DAA6CEF5 /* APName.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1110CECC8E44817427BA /* APName.m */; }; + 2DBA1654909F54B67D96660B /* APAddressBook.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA123EFBE5B409B9111B86 /* APAddressBook.m */; }; + 2DBA1783A20B78BE9D6332FD /* APAddress.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA17824D79A12190E14375 /* APAddress.m */; }; + 2DBA1A582ABC6F58B8A0D449 /* APRecordDate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA18378CDE8AE31652331C /* APRecordDate.m */; }; + 2DBA1A984A91F1E1E50E3DE8 /* APAddressBookContactsRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1E6BFFDB5F1E349A96BB /* APAddressBookContactsRoutine.m */; }; + 2DBA1AE1A8AB788AA8CF15A4 /* APThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA189599C6B31A72EB0CE9 /* APThread.m */; }; + 2DBA1BC9EED5462A024481A5 /* APContactListBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA154C8B20FB7556B33BF3 /* APContactListBuilder.m */; }; + 2DBA1C40BAEF932953A3DC10 /* APPhone.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA184B1328BAE0C2AB3098 /* APPhone.m */; }; + 2DBA1DC67D42A8A81F4EFD53 /* APAddressBookAccessRoutine.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1E2382540BBC10854E10 /* APAddressBookAccessRoutine.m */; }; + 2DBA1DD0550B594123730793 /* APSocialServiceHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1AC3FD2AB6EF5F11CE6A /* APSocialServiceHelper.m */; }; + 2DBA1E1FBA95E582E879A326 /* APSocialProfile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA11046E14BA8075C5B120 /* APSocialProfile.m */; }; + 2DBA1E4AB48F969F9AED63F7 /* APEmail.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA130787B48B8D7BC73E83 /* APEmail.m */; }; + 2DBA1E5B1AF314C1EDDA00E5 /* APContactBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1048CD3B338646BB9C66 /* APContactBuilder.m */; }; + 2DBA1ECFA0D6AA6D5AF749EB /* APSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA1DE9DD82DFA9E496F085 /* APSource.m */; }; + 2DBA1EE673A2FD279C4D0D87 /* APContact.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA155472E02E506BA9D6F1 /* APContact.m */; }; + 2DBA1F6F791385D7CCB2E1E8 /* APRelatedPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA131BD6673A7558AF8A0F /* APRelatedPerson.m */; }; + 2DBA1FFA4686F65762B5C898 /* APAddressBookRefWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DBA190C6719701C9A6D00D7 /* APAddressBookRefWrapper.m */; }; E3F1D892D235D625184F9F17 /* Pods.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BB78809B6D8C50909ECAA0D /* Pods.framework */; settings = {ATTRIBUTES = (Weak, ); }; }; FA3B984C198ABBB5005953CE /* TableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3B984B198ABBB5005953CE /* TableViewCell.swift */; }; FACA8345198AB2FD0059676C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = FACA8344198AB2FD0059676C /* AppDelegate.swift */; }; @@ -38,53 +38,53 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ - 2DBA102681262588EE7ED16A /* APRelatedPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APRelatedPerson.h; sourceTree = ""; }; - 2DBA10442A033217D1DC2AFB /* APContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContact.h; sourceTree = ""; }; - 2DBA10BD5C043BD14272E54F /* APAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBook.m; sourceTree = ""; }; - 2DBA10CD448035BCCF8CE18C /* APSocialServiceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialServiceHelper.m; sourceTree = ""; }; - 2DBA10E940F4C7E60D2262F6 /* APEmail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APEmail.h; sourceTree = ""; }; - 2DBA1168489732203DE23D9D /* APAddressBookAccessRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookAccessRoutine.h; sourceTree = ""; }; - 2DBA11EE622FFA2504496E45 /* APSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSource.h; sourceTree = ""; }; - 2DBA11FD396A98F1816F9D9C /* APRelatedPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APRelatedPerson.m; sourceTree = ""; }; - 2DBA1238D6D0DF076ED7DB7C /* APAddressBookRefWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookRefWrapper.h; sourceTree = ""; }; - 2DBA12CAA85ADFA4C222ACB2 /* APJob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APJob.m; sourceTree = ""; }; - 2DBA12E240C11F068D413172 /* APContactDataExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactDataExtractor.m; sourceTree = ""; }; - 2DBA130FE5FE2BED92606430 /* APThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APThread.m; sourceTree = ""; }; - 2DBA1342891040EAAAB3E2F8 /* APAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddress.h; sourceTree = ""; }; - 2DBA13653E4A7E9BFE89F25E /* APSocialServiceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSocialServiceHelper.h; sourceTree = ""; }; - 2DBA1369D8302D0C20720875 /* APEmail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APEmail.m; sourceTree = ""; }; - 2DBA13DB900E2EFE71DD0F16 /* APAddressBookExternalChangeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeDelegate.h; sourceTree = ""; }; - 2DBA15E1EA2F2E03F80B0F15 /* APSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSource.m; sourceTree = ""; }; - 2DBA1604B89FECA28D63A4E1 /* APContactBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactBuilder.m; sourceTree = ""; }; - 2DBA160E25DEB4B77308F3DB /* APContactDataExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactDataExtractor.h; sourceTree = ""; }; - 2DBA16351BA607C359F2FCB0 /* APAddressBookRefWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookRefWrapper.m; sourceTree = ""; }; - 2DBA16420DD38F18BCE12232 /* APThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APThread.h; sourceTree = ""; }; - 2DBA16A1950DE98135C600D6 /* APRecordDate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APRecordDate.m; sourceTree = ""; }; - 2DBA16B326E21D6053493723 /* NSArray+APAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+APAddressBook.h"; sourceTree = ""; }; - 2DBA16DA407D0A91F2841B76 /* APAddressBookAccessRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookAccessRoutine.m; sourceTree = ""; }; - 2DBA16EAD199DF0493EFCB59 /* APAddressBookBaseRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookBaseRoutine.h; sourceTree = ""; }; - 2DBA173B481774839DEE8987 /* APPhone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APPhone.h; sourceTree = ""; }; - 2DBA17882043145CD3A50C80 /* APPhone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APPhone.m; sourceTree = ""; }; - 2DBA18030237861E44675FDA /* APSocialProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSocialProfile.h; sourceTree = ""; }; - 2DBA180DA420E18728FC4027 /* APAddressBookBaseRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookBaseRoutine.m; sourceTree = ""; }; - 2DBA1840FDFEC835948E8807 /* APImageExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APImageExtractor.m; sourceTree = ""; }; - 2DBA1869B0C3604B3EA3EB6F /* APContactBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactBuilder.h; sourceTree = ""; }; - 2DBA18C793434452679E0397 /* APTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APTypes.h; sourceTree = ""; }; - 2DBA197CF7460F591922CF6B /* APJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APJob.h; sourceTree = ""; }; - 2DBA19AED5CF3A6DF88298D6 /* APSocialProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialProfile.m; sourceTree = ""; }; - 2DBA19F1F14B24CC0B4DF4DE /* APAddressBook-Bridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-Bridging.h"; sourceTree = ""; }; - 2DBA1AE391BBD61912B087DC /* APContact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContact.m; sourceTree = ""; }; - 2DBA1B612222E9AD4E6C8C88 /* APAddressBookExternalChangeRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookExternalChangeRoutine.m; sourceTree = ""; }; - 2DBA1BD363A9810C1245ABD2 /* APAddressBookContactsRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookContactsRoutine.m; sourceTree = ""; }; - 2DBA1C3D76A6F63ACF28BFF2 /* APImageExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APImageExtractor.h; sourceTree = ""; }; - 2DBA1C5CF713C376E950F8B0 /* APRecordDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APRecordDate.h; sourceTree = ""; }; - 2DBA1CF60065FEF98A3C708D /* APAddressBookExternalChangeRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeRoutine.h; sourceTree = ""; }; - 2DBA1CFC3695941F9B6C0192 /* APAddressBookContactsRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookContactsRoutine.h; sourceTree = ""; }; - 2DBA1D31B171A05F7591F068 /* APName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APName.h; sourceTree = ""; }; - 2DBA1E30D2262D6633DBBC21 /* APName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APName.m; sourceTree = ""; }; - 2DBA1E9C053CF61078C9837B /* APAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBook.h; sourceTree = ""; }; - 2DBA1F8E5321648E0D2FA935 /* APAddress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddress.m; sourceTree = ""; }; - 2DBA1F8EC05FD1E6B25610F8 /* NSArray+APAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+APAddressBook.m"; sourceTree = ""; }; + 2DBA1048CD3B338646BB9C66 /* APContactBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactBuilder.m; sourceTree = ""; }; + 2DBA11046E14BA8075C5B120 /* APSocialProfile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialProfile.m; sourceTree = ""; }; + 2DBA1110CECC8E44817427BA /* APName.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APName.m; sourceTree = ""; }; + 2DBA116A4AACE0D56429AC31 /* APContactListBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactListBuilder.h; sourceTree = ""; }; + 2DBA11A6158E80912C2417C0 /* APContactDataExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactDataExtractor.m; sourceTree = ""; }; + 2DBA11A7E9C7D7D61F5D0F72 /* APJob.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APJob.m; sourceTree = ""; }; + 2DBA11BED4A45C6478130EDF /* APImageExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APImageExtractor.m; sourceTree = ""; }; + 2DBA123EFBE5B409B9111B86 /* APAddressBook.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBook.m; sourceTree = ""; }; + 2DBA130787B48B8D7BC73E83 /* APEmail.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APEmail.m; sourceTree = ""; }; + 2DBA131BD6673A7558AF8A0F /* APRelatedPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APRelatedPerson.m; sourceTree = ""; }; + 2DBA13B75C3B99FE4A7A18B7 /* APAddressBook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBook.h; sourceTree = ""; }; + 2DBA14678C0E2E2C8BC58CED /* APContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContact.h; sourceTree = ""; }; + 2DBA1514E601031090E364E8 /* APContactBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactBuilder.h; sourceTree = ""; }; + 2DBA154C8B20FB7556B33BF3 /* APContactListBuilder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContactListBuilder.m; sourceTree = ""; }; + 2DBA155472E02E506BA9D6F1 /* APContact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APContact.m; sourceTree = ""; }; + 2DBA15718E25ED8C60C1302F /* APAddress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddress.h; sourceTree = ""; }; + 2DBA15E7274B49D68157EEFE /* APAddressBookBaseRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookBaseRoutine.h; sourceTree = ""; }; + 2DBA1653EB0073A06DB7FC01 /* APAddressBookExternalChangeRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookExternalChangeRoutine.m; sourceTree = ""; }; + 2DBA165A4FBA83B1F5A96E9C /* APEmail.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APEmail.h; sourceTree = ""; }; + 2DBA171D325049938D723931 /* APSocialServiceHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSocialServiceHelper.h; sourceTree = ""; }; + 2DBA171D63EC1739966C6DB9 /* APTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APTypes.h; sourceTree = ""; }; + 2DBA17824D79A12190E14375 /* APAddress.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddress.m; sourceTree = ""; }; + 2DBA17932859F6C7DC09E87B /* APThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APThread.h; sourceTree = ""; }; + 2DBA1827EE564C3C8801F773 /* APRelatedPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APRelatedPerson.h; sourceTree = ""; }; + 2DBA18378CDE8AE31652331C /* APRecordDate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APRecordDate.m; sourceTree = ""; }; + 2DBA18385C74CDC4304893FA /* APPhone.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APPhone.h; sourceTree = ""; }; + 2DBA184B1328BAE0C2AB3098 /* APPhone.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APPhone.m; sourceTree = ""; }; + 2DBA18824CD9350474CB279C /* APAddressBookExternalChangeRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeRoutine.h; sourceTree = ""; }; + 2DBA189479172E11DCF3E74D /* APAddressBookExternalChangeDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookExternalChangeDelegate.h; sourceTree = ""; }; + 2DBA189599C6B31A72EB0CE9 /* APThread.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APThread.m; sourceTree = ""; }; + 2DBA18B3FB4EAF6FA0309FA5 /* APAddressBookContactsRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookContactsRoutine.h; sourceTree = ""; }; + 2DBA190C6719701C9A6D00D7 /* APAddressBookRefWrapper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookRefWrapper.m; sourceTree = ""; }; + 2DBA191A407A17328EBCB862 /* APAddressBookBaseRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookBaseRoutine.m; sourceTree = ""; }; + 2DBA19B7FEF5E93F18CD7C3D /* APJob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APJob.h; sourceTree = ""; }; + 2DBA19FAF05C5E4414B14FD5 /* APSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSource.h; sourceTree = ""; }; + 2DBA1AC3FD2AB6EF5F11CE6A /* APSocialServiceHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSocialServiceHelper.m; sourceTree = ""; }; + 2DBA1C491590AC48CB78F468 /* APSocialProfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APSocialProfile.h; sourceTree = ""; }; + 2DBA1CC256AA4D0B131AB064 /* APAddressBook-Bridging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "APAddressBook-Bridging.h"; sourceTree = ""; }; + 2DBA1D8E14020A91DEC9E9C3 /* APRecordDate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APRecordDate.h; sourceTree = ""; }; + 2DBA1DE9DD82DFA9E496F085 /* APSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APSource.m; sourceTree = ""; }; + 2DBA1E2382540BBC10854E10 /* APAddressBookAccessRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookAccessRoutine.m; sourceTree = ""; }; + 2DBA1E4A80EA26715164C42A /* APAddressBookRefWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookRefWrapper.h; sourceTree = ""; }; + 2DBA1E5D47F1A4743F80AB6F /* APImageExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APImageExtractor.h; sourceTree = ""; }; + 2DBA1E6BFFDB5F1E349A96BB /* APAddressBookContactsRoutine.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = APAddressBookContactsRoutine.m; sourceTree = ""; }; + 2DBA1F116A36CEC31336B03A /* APContactDataExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APContactDataExtractor.h; sourceTree = ""; }; + 2DBA1F1817C3D8AC9FF6AFA5 /* APAddressBookAccessRoutine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APAddressBookAccessRoutine.h; sourceTree = ""; }; + 2DBA1F85850F60B377D86605 /* APName.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APName.h; sourceTree = ""; }; 3BB78809B6D8C50909ECAA0D /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 66F112F4D42891A3F34E4113 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; C119F157280640CA31CD4E27 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; @@ -110,165 +110,157 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 2DBA100BDA69B48521252649 /* Pod */ = { + 2DBA106A52A3610F023C82B0 /* Pod */ = { isa = PBXGroup; children = ( - 2DBA18B61FC13D765A0B17D2 /* Core */, - 2DBA13549AB40E2C56FE686A /* Swift */, + 2DBA1B23DCD6A7C21D834FE6 /* Core */, + 2DBA1B8CBAB66C4D853DE9AD /* Swift */, ); name = Pod; path = ../../Pod; sourceTree = ""; }; - 2DBA1047D5582F79D7D3A5EC /* Wrapper */ = { + 2DBA11584FFD32616129A910 /* Thread */ = { isa = PBXGroup; children = ( - 2DBA1238D6D0DF076ED7DB7C /* APAddressBookRefWrapper.h */, - 2DBA16351BA607C359F2FCB0 /* APAddressBookRefWrapper.m */, + 2DBA17932859F6C7DC09E87B /* APThread.h */, + 2DBA189599C6B31A72EB0CE9 /* APThread.m */, ); - path = Wrapper; + path = Thread; sourceTree = ""; }; - 2DBA1083ADA1F7E266A0CC86 /* Private */ = { + 2DBA13BC76AAAADDBFE27F8B /* Wrapper */ = { isa = PBXGroup; children = ( - 2DBA1862676AC70744BED483 /* Thread */, - 2DBA19CA9633637761F1C100 /* Helpers */, - 2DBA18DF1FC4375CECDFD11A /* Routine */, - 2DBA1047D5582F79D7D3A5EC /* Wrapper */, - 2DBA1B22DC5059AA9308CE5C /* Builders */, - 2DBA15E8A3668592D18189C6 /* Categories */, - 2DBA1C0B34C06D769D5E250B /* Extractors */, + 2DBA1E4A80EA26715164C42A /* APAddressBookRefWrapper.h */, + 2DBA190C6719701C9A6D00D7 /* APAddressBookRefWrapper.m */, ); - path = Private; + path = Wrapper; sourceTree = ""; }; - 2DBA1090E5E8FDD43C06D584 /* Public */ = { + 2DBA1B23DCD6A7C21D834FE6 /* Core */ = { isa = PBXGroup; children = ( - 2DBA1B6C9DD6D3C5A803C300 /* Models */, - 2DBA1E9C053CF61078C9837B /* APAddressBook.h */, - 2DBA10BD5C043BD14272E54F /* APAddressBook.m */, + 2DBA1E4C58D1E0E438C3BC7A /* Public */, + 2DBA1C1CEBF8BE050EA5A8E4 /* Private */, ); - path = Public; + path = Core; sourceTree = ""; }; - 2DBA13549AB40E2C56FE686A /* Swift */ = { + 2DBA1B8CBAB66C4D853DE9AD /* Swift */ = { isa = PBXGroup; children = ( - 2DBA19F1F14B24CC0B4DF4DE /* APAddressBook-Bridging.h */, + 2DBA1CC256AA4D0B131AB064 /* APAddressBook-Bridging.h */, ); path = Swift; sourceTree = ""; }; - 2DBA15E8A3668592D18189C6 /* Categories */ = { + 2DBA1C1CEBF8BE050EA5A8E4 /* Private */ = { isa = PBXGroup; children = ( - 2DBA16B326E21D6053493723 /* NSArray+APAddressBook.h */, - 2DBA1F8EC05FD1E6B25610F8 /* NSArray+APAddressBook.m */, + 2DBA11584FFD32616129A910 /* Thread */, + 2DBA1D579BECEF012FA75E1F /* Helpers */, + 2DBA1CB9CA550B02A720F665 /* Routine */, + 2DBA13BC76AAAADDBFE27F8B /* Wrapper */, + 2DBA1CF4BB61C176F73CE945 /* Builders */, + 2DBA1ED95DB5A3090CECAC38 /* Extractors */, ); - path = Categories; + path = Private; sourceTree = ""; }; - 2DBA1841ABB9D85BF09F6B7C /* Base */ = { + 2DBA1CB9CA550B02A720F665 /* Routine */ = { isa = PBXGroup; children = ( - 2DBA16EAD199DF0493EFCB59 /* APAddressBookBaseRoutine.h */, - 2DBA180DA420E18728FC4027 /* APAddressBookBaseRoutine.m */, + 2DBA1D9D592A02E30FEB20A1 /* Base */, + 2DBA1F1817C3D8AC9FF6AFA5 /* APAddressBookAccessRoutine.h */, + 2DBA1E2382540BBC10854E10 /* APAddressBookAccessRoutine.m */, + 2DBA18B3FB4EAF6FA0309FA5 /* APAddressBookContactsRoutine.h */, + 2DBA1E6BFFDB5F1E349A96BB /* APAddressBookContactsRoutine.m */, + 2DBA18824CD9350474CB279C /* APAddressBookExternalChangeRoutine.h */, + 2DBA1653EB0073A06DB7FC01 /* APAddressBookExternalChangeRoutine.m */, + 2DBA189479172E11DCF3E74D /* APAddressBookExternalChangeDelegate.h */, ); - path = Base; + path = Routine; sourceTree = ""; }; - 2DBA1862676AC70744BED483 /* Thread */ = { + 2DBA1CF4BB61C176F73CE945 /* Builders */ = { isa = PBXGroup; children = ( - 2DBA16420DD38F18BCE12232 /* APThread.h */, - 2DBA130FE5FE2BED92606430 /* APThread.m */, + 2DBA1514E601031090E364E8 /* APContactBuilder.h */, + 2DBA1048CD3B338646BB9C66 /* APContactBuilder.m */, + 2DBA116A4AACE0D56429AC31 /* APContactListBuilder.h */, + 2DBA154C8B20FB7556B33BF3 /* APContactListBuilder.m */, ); - path = Thread; + path = Builders; sourceTree = ""; }; - 2DBA18B61FC13D765A0B17D2 /* Core */ = { + 2DBA1D579BECEF012FA75E1F /* Helpers */ = { isa = PBXGroup; children = ( - 2DBA1090E5E8FDD43C06D584 /* Public */, - 2DBA1083ADA1F7E266A0CC86 /* Private */, + 2DBA171D325049938D723931 /* APSocialServiceHelper.h */, + 2DBA1AC3FD2AB6EF5F11CE6A /* APSocialServiceHelper.m */, ); - path = Core; + path = Helpers; sourceTree = ""; }; - 2DBA18DF1FC4375CECDFD11A /* Routine */ = { + 2DBA1D9D592A02E30FEB20A1 /* Base */ = { isa = PBXGroup; children = ( - 2DBA1841ABB9D85BF09F6B7C /* Base */, - 2DBA1168489732203DE23D9D /* APAddressBookAccessRoutine.h */, - 2DBA16DA407D0A91F2841B76 /* APAddressBookAccessRoutine.m */, - 2DBA1CFC3695941F9B6C0192 /* APAddressBookContactsRoutine.h */, - 2DBA1BD363A9810C1245ABD2 /* APAddressBookContactsRoutine.m */, - 2DBA1CF60065FEF98A3C708D /* APAddressBookExternalChangeRoutine.h */, - 2DBA1B612222E9AD4E6C8C88 /* APAddressBookExternalChangeRoutine.m */, - 2DBA13DB900E2EFE71DD0F16 /* APAddressBookExternalChangeDelegate.h */, + 2DBA15E7274B49D68157EEFE /* APAddressBookBaseRoutine.h */, + 2DBA191A407A17328EBCB862 /* APAddressBookBaseRoutine.m */, ); - path = Routine; + path = Base; sourceTree = ""; }; - 2DBA19CA9633637761F1C100 /* Helpers */ = { + 2DBA1E4C58D1E0E438C3BC7A /* Public */ = { isa = PBXGroup; children = ( - 2DBA13653E4A7E9BFE89F25E /* APSocialServiceHelper.h */, - 2DBA10CD448035BCCF8CE18C /* APSocialServiceHelper.m */, + 2DBA1FABF3C743C0CADA1EB7 /* Models */, + 2DBA13B75C3B99FE4A7A18B7 /* APAddressBook.h */, + 2DBA123EFBE5B409B9111B86 /* APAddressBook.m */, ); - path = Helpers; + path = Public; sourceTree = ""; }; - 2DBA1B22DC5059AA9308CE5C /* Builders */ = { + 2DBA1ED95DB5A3090CECAC38 /* Extractors */ = { isa = PBXGroup; children = ( - 2DBA1869B0C3604B3EA3EB6F /* APContactBuilder.h */, - 2DBA1604B89FECA28D63A4E1 /* APContactBuilder.m */, + 2DBA1E5D47F1A4743F80AB6F /* APImageExtractor.h */, + 2DBA11BED4A45C6478130EDF /* APImageExtractor.m */, + 2DBA1F116A36CEC31336B03A /* APContactDataExtractor.h */, + 2DBA11A6158E80912C2417C0 /* APContactDataExtractor.m */, ); - path = Builders; + path = Extractors; sourceTree = ""; }; - 2DBA1B6C9DD6D3C5A803C300 /* Models */ = { + 2DBA1FABF3C743C0CADA1EB7 /* Models */ = { isa = PBXGroup; children = ( - 2DBA197CF7460F591922CF6B /* APJob.h */, - 2DBA12CAA85ADFA4C222ACB2 /* APJob.m */, - 2DBA1D31B171A05F7591F068 /* APName.h */, - 2DBA1E30D2262D6633DBBC21 /* APName.m */, - 2DBA10E940F4C7E60D2262F6 /* APEmail.h */, - 2DBA1369D8302D0C20720875 /* APEmail.m */, - 2DBA173B481774839DEE8987 /* APPhone.h */, - 2DBA17882043145CD3A50C80 /* APPhone.m */, - 2DBA18C793434452679E0397 /* APTypes.h */, - 2DBA11EE622FFA2504496E45 /* APSource.h */, - 2DBA15E1EA2F2E03F80B0F15 /* APSource.m */, - 2DBA1342891040EAAAB3E2F8 /* APAddress.h */, - 2DBA1F8E5321648E0D2FA935 /* APAddress.m */, - 2DBA10442A033217D1DC2AFB /* APContact.h */, - 2DBA1AE391BBD61912B087DC /* APContact.m */, - 2DBA1C5CF713C376E950F8B0 /* APRecordDate.h */, - 2DBA16A1950DE98135C600D6 /* APRecordDate.m */, - 2DBA102681262588EE7ED16A /* APRelatedPerson.h */, - 2DBA11FD396A98F1816F9D9C /* APRelatedPerson.m */, - 2DBA18030237861E44675FDA /* APSocialProfile.h */, - 2DBA19AED5CF3A6DF88298D6 /* APSocialProfile.m */, + 2DBA19B7FEF5E93F18CD7C3D /* APJob.h */, + 2DBA11A7E9C7D7D61F5D0F72 /* APJob.m */, + 2DBA1F85850F60B377D86605 /* APName.h */, + 2DBA1110CECC8E44817427BA /* APName.m */, + 2DBA165A4FBA83B1F5A96E9C /* APEmail.h */, + 2DBA130787B48B8D7BC73E83 /* APEmail.m */, + 2DBA18385C74CDC4304893FA /* APPhone.h */, + 2DBA184B1328BAE0C2AB3098 /* APPhone.m */, + 2DBA171D63EC1739966C6DB9 /* APTypes.h */, + 2DBA19FAF05C5E4414B14FD5 /* APSource.h */, + 2DBA1DE9DD82DFA9E496F085 /* APSource.m */, + 2DBA15718E25ED8C60C1302F /* APAddress.h */, + 2DBA17824D79A12190E14375 /* APAddress.m */, + 2DBA14678C0E2E2C8BC58CED /* APContact.h */, + 2DBA155472E02E506BA9D6F1 /* APContact.m */, + 2DBA1D8E14020A91DEC9E9C3 /* APRecordDate.h */, + 2DBA18378CDE8AE31652331C /* APRecordDate.m */, + 2DBA1827EE564C3C8801F773 /* APRelatedPerson.h */, + 2DBA131BD6673A7558AF8A0F /* APRelatedPerson.m */, + 2DBA1C491590AC48CB78F468 /* APSocialProfile.h */, + 2DBA11046E14BA8075C5B120 /* APSocialProfile.m */, ); path = Models; sourceTree = ""; }; - 2DBA1C0B34C06D769D5E250B /* Extractors */ = { - isa = PBXGroup; - children = ( - 2DBA1C3D76A6F63ACF28BFF2 /* APImageExtractor.h */, - 2DBA1840FDFEC835948E8807 /* APImageExtractor.m */, - 2DBA160E25DEB4B77308F3DB /* APContactDataExtractor.h */, - 2DBA12E240C11F068D413172 /* APContactDataExtractor.m */, - ); - path = Extractors; - sourceTree = ""; - }; 4845391491E59C918D93E784 /* Pods */ = { isa = PBXGroup; children = ( @@ -318,7 +310,7 @@ FACA8340198AB2FD0059676C /* Products */, 65E3953D9FB24ACD81049105 /* Frameworks */, 4845391491E59C918D93E784 /* Pods */, - 2DBA100BDA69B48521252649 /* Pod */, + 2DBA106A52A3610F023C82B0 /* Pod */, ); sourceTree = ""; }; @@ -475,28 +467,28 @@ FACA8347198AB2FD0059676C /* ViewController.swift in Sources */, FA3B984C198ABBB5005953CE /* TableViewCell.swift in Sources */, FACA8345198AB2FD0059676C /* AppDelegate.swift in Sources */, - 2DBA1D06B540412341183C26 /* APJob.m in Sources */, - 2DBA1FEA55E9F18B48D08744 /* APName.m in Sources */, - 2DBA1698444FFC18865D3F8A /* APEmail.m in Sources */, - 2DBA18D0F47A1B7C5A949975 /* APPhone.m in Sources */, - 2DBA1FF448126E5A664886A6 /* APSource.m in Sources */, - 2DBA12C009DF840FBF8B9814 /* APAddress.m in Sources */, - 2DBA14C1FDD7C0FCF2AA90CD /* APContact.m in Sources */, - 2DBA1510F4032ED6F7865F46 /* APRecordDate.m in Sources */, - 2DBA1C184E4D42C3554159FE /* APRelatedPerson.m in Sources */, - 2DBA1EBDD7AAA1F6DFCDA8C8 /* APSocialProfile.m in Sources */, - 2DBA167261FFA4BBC45578CD /* APAddressBook.m in Sources */, - 2DBA1A57C7C32CE574FCBAA8 /* APThread.m in Sources */, - 2DBA10BA949BD8EE94CE1B7F /* APSocialServiceHelper.m in Sources */, - 2DBA16BC6A2D5A26B09A35CB /* APAddressBookBaseRoutine.m in Sources */, - 2DBA16C1CB1EF01C1A9D7C4B /* APAddressBookAccessRoutine.m in Sources */, - 2DBA16781C5DC6A96A2CFF52 /* APAddressBookContactsRoutine.m in Sources */, - 2DBA1ED5FF8BB0422251D099 /* APAddressBookExternalChangeRoutine.m in Sources */, - 2DBA1ED7FA65157CAFEE6AD6 /* APAddressBookRefWrapper.m in Sources */, - 2DBA10737FE3D78B376ECA63 /* APContactBuilder.m in Sources */, - 2DBA109D090690D1FFC475E1 /* NSArray+APAddressBook.m in Sources */, - 2DBA1C1C26ADAA7E92CA8B2C /* APImageExtractor.m in Sources */, - 2DBA1016FFF055FF45A9055F /* APContactDataExtractor.m in Sources */, + 2DBA11E17A9ECE25A5344061 /* APJob.m in Sources */, + 2DBA15FF889BC911DAA6CEF5 /* APName.m in Sources */, + 2DBA1E4AB48F969F9AED63F7 /* APEmail.m in Sources */, + 2DBA1C40BAEF932953A3DC10 /* APPhone.m in Sources */, + 2DBA1ECFA0D6AA6D5AF749EB /* APSource.m in Sources */, + 2DBA1783A20B78BE9D6332FD /* APAddress.m in Sources */, + 2DBA1EE673A2FD279C4D0D87 /* APContact.m in Sources */, + 2DBA1A582ABC6F58B8A0D449 /* APRecordDate.m in Sources */, + 2DBA1F6F791385D7CCB2E1E8 /* APRelatedPerson.m in Sources */, + 2DBA1E1FBA95E582E879A326 /* APSocialProfile.m in Sources */, + 2DBA1654909F54B67D96660B /* APAddressBook.m in Sources */, + 2DBA1AE1A8AB788AA8CF15A4 /* APThread.m in Sources */, + 2DBA1DD0550B594123730793 /* APSocialServiceHelper.m in Sources */, + 2DBA103F266316AADDFA6CF6 /* APAddressBookBaseRoutine.m in Sources */, + 2DBA1DC67D42A8A81F4EFD53 /* APAddressBookAccessRoutine.m in Sources */, + 2DBA1A984A91F1E1E50E3DE8 /* APAddressBookContactsRoutine.m in Sources */, + 2DBA11C73DCD37CFA04EBA13 /* APAddressBookExternalChangeRoutine.m in Sources */, + 2DBA1FFA4686F65762B5C898 /* APAddressBookRefWrapper.m in Sources */, + 2DBA1E5B1AF314C1EDDA00E5 /* APContactBuilder.m in Sources */, + 2DBA1BC9EED5462A024481A5 /* APContactListBuilder.m in Sources */, + 2DBA11DB5C9ECF1F6A645F26 /* APImageExtractor.m in Sources */, + 2DBA143CADE9B17CDA427FD7 /* APContactDataExtractor.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Pod/Core/Private/Builders/APContactListBuilder.h b/Pod/Core/Private/Builders/APContactListBuilder.h new file mode 100644 index 0000000..a92b661 --- /dev/null +++ b/Pod/Core/Private/Builders/APContactListBuilder.h @@ -0,0 +1,20 @@ +// +// APContactListBuilder +// AddressBook +// +// Created by Alexey Belkevich on 06.10.15. +// Copyright © 2015 alterplay. All rights reserved. +// + +#import + +@class APContact; + +@interface APContactListBuilder : NSObject + +@property (nonatomic, strong) BOOL (^filterBlock)(APContact *contact); +@property (nonatomic, strong) NSArray *sortDescriptors; + +- (NSArray *)contactListWithAllContacts:(NSArray *)allContacts; + +@end \ No newline at end of file diff --git a/Pod/Core/Private/Builders/APContactListBuilder.m b/Pod/Core/Private/Builders/APContactListBuilder.m new file mode 100644 index 0000000..93153e1 --- /dev/null +++ b/Pod/Core/Private/Builders/APContactListBuilder.m @@ -0,0 +1,47 @@ +// +// APContactListBuilder +// AddressBook +// +// Created by Alexey Belkevich on 06.10.15. +// Copyright © 2015 alterplay. All rights reserved. +// + +#import "APContactListBuilder.h" +#import "APContact.h" + +@implementation APContactListBuilder + +#pragma mark - public + +- (NSArray *)contactListWithAllContacts:(NSArray *)allContacts +{ + NSMutableArray *mutableContacts = allContacts.mutableCopy; + [self filterContacts:mutableContacts]; + [self sortContacts:mutableContacts]; + return mutableContacts.copy; +} + +#pragma mark - private + +- (void)filterContacts:(NSMutableArray *)contacts +{ + if (self.filterBlock) + { + NSPredicate *predicate; + predicate = [NSPredicate predicateWithBlock:^BOOL(APContact *contact, NSDictionary *bindings) + { + return self.filterBlock(contact); + }]; + [contacts filterUsingPredicate:predicate]; + } +} + +- (void)sortContacts:(NSMutableArray *)contacts +{ + if (self.sortDescriptors) + { + [contacts sortUsingDescriptors:self.sortDescriptors]; + } +} + +@end \ No newline at end of file diff --git a/Pod/Core/Private/Categories/NSArray+APAddressBook.h b/Pod/Core/Private/Categories/NSArray+APAddressBook.h deleted file mode 100644 index 01ac6f7..0000000 --- a/Pod/Core/Private/Categories/NSArray+APAddressBook.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSArray(APAddressBook) -// AddressBook -// -// Created by Alexey Belkevich on 21.09.15. -// Copyright © 2015 alterplay. All rights reserved. -// - -#import - -@class APContact; - -@interface NSArray (APAddressBook) - -- (NSArray *)filteredArrayWithBlock:(BOOL (^)(APContact *contact))filterBlock - sortedWithDescriptors:(NSArray *)descriptors; - -@end \ No newline at end of file diff --git a/Pod/Core/Private/Categories/NSArray+APAddressBook.m b/Pod/Core/Private/Categories/NSArray+APAddressBook.m deleted file mode 100644 index 34f5400..0000000 --- a/Pod/Core/Private/Categories/NSArray+APAddressBook.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// NSArray(APAddressBook) -// AddressBook -// -// Created by Alexey Belkevich on 21.09.15. -// Copyright © 2015 alterplay. All rights reserved. -// - -#import "NSArray+APAddressBook.h" -#import "APContact.h" - -@implementation NSArray (APAddressBook) - -- (NSArray *)filteredArrayWithBlock:(BOOL (^)(APContact *contact))filterBlock - sortedWithDescriptors:(NSArray *)descriptors -{ - NSMutableArray *result = [[NSMutableArray alloc] init]; - if (filterBlock) - { - for (APContact *contact in self) - { - if (filterBlock(contact)) - { - [result addObject:contact]; - } - } - } - else - { - [result addObjectsFromArray:self]; - } - if (descriptors) - { - [result sortUsingDescriptors:descriptors]; - } - return result.copy; -} - -@end \ No newline at end of file diff --git a/Pod/Core/Private/Routine/APAddressBookContactsRoutine.m b/Pod/Core/Private/Routine/APAddressBookContactsRoutine.m index fb7b702..66db5f1 100644 --- a/Pod/Core/Private/Routine/APAddressBookContactsRoutine.m +++ b/Pod/Core/Private/Routine/APAddressBookContactsRoutine.m @@ -11,6 +11,7 @@ #import "APAddressBookRefWrapper.h" #import "APContactBuilder.h" #import "APImageExtractor.h" +#import "APContact.h" @interface APAddressBookContactsRoutine () @property (nonatomic, strong) APContactBuilder *builder; @@ -67,5 +68,4 @@ - (UIImage *)imageWithRecordID:(NSNumber *)recordID return nil; } - @end \ No newline at end of file diff --git a/Pod/Core/Public/APAddressBook.m b/Pod/Core/Public/APAddressBook.m index 2fd654b..92c1a42 100755 --- a/Pod/Core/Public/APAddressBook.m +++ b/Pod/Core/Public/APAddressBook.m @@ -10,9 +10,9 @@ #import "APAddressBookAccessRoutine.h" #import "APAddressBookContactsRoutine.h" #import "APAddressBookExternalChangeRoutine.h" +#import "APContactListBuilder.h" #import "APAddressBookRefWrapper.h" #import "APThread.h" -#import "NSArray+APAddressBook.h" @interface APAddressBook () @property (nonatomic, strong) APAddressBookAccessRoutine *access; @@ -70,9 +70,10 @@ - (void)loadContacts:(APLoadContactsBlock)completionBlock - (void)loadContactsOnQueue:(dispatch_queue_t)queue completion:(APLoadContactsBlock)completionBlock { - NSArray *descriptors = self.sortDescriptors; - APFilterContactsBlock filterBlock = self.filterBlock; APContactField fieldMask = self.fieldsMask; + APContactListBuilder *listBuilder = [[APContactListBuilder alloc] init]; + listBuilder.filterBlock = self.filterBlock; + listBuilder.sortDescriptors = self.sortDescriptors; [self.thread dispatchAsync:^ { [self.access requestAccessWithCompletion:^(BOOL granted, NSError *error) @@ -80,7 +81,7 @@ - (void)loadContactsOnQueue:(dispatch_queue_t)queue completion:(APLoadContactsBl [self.thread dispatchAsync:^ { NSArray *contacts = granted ? [self.contacts allContactsWithContactFieldMask:fieldMask] : nil; - contacts = [contacts filteredArrayWithBlock:filterBlock sortedWithDescriptors:descriptors]; + contacts = [listBuilder contactListWithAllContacts:contacts]; dispatch_async(queue, ^ { completionBlock ? completionBlock(contacts, error) : nil; @@ -100,8 +101,7 @@ - (void)loadContactByRecordID:(NSNumber *)recordID onQueue:(dispatch_queue_t)que { [self.thread dispatchAsync:^ { - APContact *contact = [self.contacts contactByRecordID:recordID - withFieldMask:self.fieldsMask]; + APContact *contact = [self.contacts contactByRecordID:recordID withFieldMask:self.fieldsMask]; dispatch_async(queue, ^ { completion ? completion(contact) : nil; diff --git a/Pod/Core/Public/Models/APContact.h b/Pod/Core/Public/Models/APContact.h index 66dd049..607d85e 100755 --- a/Pod/Core/Public/Models/APContact.h +++ b/Pod/Core/Public/Models/APContact.h @@ -8,16 +8,15 @@ #import #import - -@class APName; -@class APJob; -@class APPhone; -@class APEmail; -@class APAddress; -@class APSocialProfile; -@class APRelatedPerson; -@class APSource; -@class APRecordDate; +#import "APName.h" +#import "APJob.h" +#import "APPhone.h" +#import "APEmail.h" +#import "APAddress.h" +#import "APSocialProfile.h" +#import "APRelatedPerson.h" +#import "APSource.h" +#import "APRecordDate.h" @interface APContact : NSObject