├── .gitignore ├── Deardialing ├── Deardialing.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ ├── Deardialing.xcscheme │ │ ├── Dialkit.xcscheme │ │ ├── calling.xcscheme │ │ └── dialing.xcscheme ├── Deardialing.xcworkspace │ └── contents.xcworkspacedata ├── Deardialing │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-100.png │ │ │ ├── Icon-108.png │ │ │ ├── Icon-114.png │ │ │ ├── Icon-120.png │ │ │ ├── Icon-128.png │ │ │ ├── Icon-144.png │ │ │ ├── Icon-152.png │ │ │ ├── Icon-155.png │ │ │ ├── Icon-16.png │ │ │ ├── Icon-167.png │ │ │ ├── Icon-180.png │ │ │ ├── Icon-192.png │ │ │ ├── Icon-256.png │ │ │ ├── Icon-28.png │ │ │ ├── Icon-29.png │ │ │ ├── Icon-32.png │ │ │ ├── Icon-40.png │ │ │ ├── Icon-48.png │ │ │ ├── Icon-50.png │ │ │ ├── Icon-512.png │ │ │ ├── Icon-57.png │ │ │ ├── Icon-58.png │ │ │ ├── Icon-60.png │ │ │ ├── Icon-64.png │ │ │ ├── Icon-72.png │ │ │ ├── Icon-76.png │ │ │ ├── Icon-80.png │ │ │ ├── Icon-87.png │ │ │ ├── Icon-90.png │ │ │ └── Icon-96.png │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Deardialing.entitlements │ ├── GroupDatil.swift │ ├── Info.plist │ ├── Item.swift │ ├── ItemCell.swift │ ├── Reusable.swift │ ├── SettingController.swift │ ├── UITableView+Reusable.swift │ ├── ViewController.swift │ └── WebController.swift ├── Dialkit │ ├── Contact.swift │ ├── Dialkit.h │ ├── Info.plist │ └── UIImage+Extension.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── FaceAware │ │ ├── FaceAware │ │ │ └── UIImageView+FaceAware.swift │ │ ├── LICENSE │ │ └── README.md │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── FaceAware │ │ ├── FaceAware-dummy.m │ │ ├── FaceAware-prefix.pch │ │ ├── FaceAware-umbrella.h │ │ ├── FaceAware.modulemap │ │ ├── FaceAware.xcconfig │ │ └── Info.plist │ │ ├── Pods-Deardialing │ │ ├── Info.plist │ │ ├── Pods-Deardialing-acknowledgements.markdown │ │ ├── Pods-Deardialing-acknowledgements.plist │ │ ├── Pods-Deardialing-dummy.m │ │ ├── Pods-Deardialing-frameworks.sh │ │ ├── Pods-Deardialing-resources.sh │ │ ├── Pods-Deardialing-umbrella.h │ │ ├── Pods-Deardialing.debug.xcconfig │ │ ├── Pods-Deardialing.modulemap │ │ └── Pods-Deardialing.release.xcconfig │ │ ├── Pods-Dialkit │ │ ├── Info.plist │ │ ├── Pods-Dialkit-acknowledgements.markdown │ │ ├── Pods-Dialkit-acknowledgements.plist │ │ ├── Pods-Dialkit-dummy.m │ │ ├── Pods-Dialkit-resources.sh │ │ ├── Pods-Dialkit-umbrella.h │ │ ├── Pods-Dialkit.debug.xcconfig │ │ ├── Pods-Dialkit.modulemap │ │ └── Pods-Dialkit.release.xcconfig │ │ ├── Pods-calling │ │ ├── Info.plist │ │ ├── Pods-calling-acknowledgements.markdown │ │ ├── Pods-calling-acknowledgements.plist │ │ ├── Pods-calling-dummy.m │ │ ├── Pods-calling-resources.sh │ │ ├── Pods-calling-umbrella.h │ │ ├── Pods-calling.debug.xcconfig │ │ ├── Pods-calling.modulemap │ │ └── Pods-calling.release.xcconfig │ │ └── Pods-dialing │ │ ├── Info.plist │ │ ├── Pods-dialing-acknowledgements.markdown │ │ ├── Pods-dialing-acknowledgements.plist │ │ ├── Pods-dialing-dummy.m │ │ ├── Pods-dialing-resources.sh │ │ ├── Pods-dialing-umbrella.h │ │ ├── Pods-dialing.debug.xcconfig │ │ ├── Pods-dialing.modulemap │ │ └── Pods-dialing.release.xcconfig ├── Utils │ └── Utils.swift ├── calling │ ├── CallDirectoryHandler.swift │ ├── Info.plist │ └── calling.entitlements └── dialing │ ├── Base.lproj │ └── MainInterface.storyboard │ ├── Info.plist │ ├── TodayViewController.swift │ └── dialing.entitlements ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output 66 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0CE372624BF2A8D4D9333E5F /* Pods_Deardialing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4D28497CB954C9DB050D97C /* Pods_Deardialing.framework */; }; 11 | 263AE530DF8B7E0CCC9D7C40 /* Pods_Dialkit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0785576863807D2327A1013 /* Pods_Dialkit.framework */; }; 12 | 3C1A08A01DED722C001C4FF5 /* Dialkit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */; }; 13 | 3C49D98C1E1A1E5200946A70 /* WebController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C49D98B1E1A1E5200946A70 /* WebController.swift */; }; 14 | 3C4AE8161E0FE60B008B3752 /* SettingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4AE8151E0FE60B008B3752 /* SettingController.swift */; }; 15 | 3C4AE81B1E0FE6DD008B3752 /* GroupDatil.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4AE8171E0FE6DD008B3752 /* GroupDatil.swift */; }; 16 | 3C4AE81C1E0FE6DD008B3752 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4AE8181E0FE6DD008B3752 /* Item.swift */; }; 17 | 3C4AE81D1E0FE6DD008B3752 /* Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4AE8191E0FE6DD008B3752 /* Reusable.swift */; }; 18 | 3C4AE81E1E0FE6DD008B3752 /* UITableView+Reusable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C4AE81A1E0FE6DD008B3752 /* UITableView+Reusable.swift */; }; 19 | 3C64ECDE1E0FF12B004581CB /* ItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C64ECDD1E0FF12B004581CB /* ItemCell.swift */; }; 20 | 3C72B3CD1DFBD61500DEC065 /* UIImage+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C72B3CC1DFBD61500DEC065 /* UIImage+Extension.swift */; }; 21 | 3C72B3CE1DFD189E00DEC065 /* dialing.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 3CBA936A1DEC226800B3A99A /* dialing.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 22 | 3CBA93551DEC224100B3A99A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBA93541DEC224100B3A99A /* AppDelegate.swift */; }; 23 | 3CBA93571DEC224100B3A99A /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBA93561DEC224100B3A99A /* ViewController.swift */; }; 24 | 3CBA935A1DEC224100B3A99A /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CBA93581DEC224100B3A99A /* Main.storyboard */; }; 25 | 3CBA935C1DEC224100B3A99A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3CBA935B1DEC224100B3A99A /* Assets.xcassets */; }; 26 | 3CBA935F1DEC224100B3A99A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CBA935D1DEC224100B3A99A /* LaunchScreen.storyboard */; }; 27 | 3CBA936D1DEC226800B3A99A /* NotificationCenter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CBA936C1DEC226800B3A99A /* NotificationCenter.framework */; }; 28 | 3CBA93701DEC226800B3A99A /* TodayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBA936F1DEC226800B3A99A /* TodayViewController.swift */; }; 29 | 3CBA93731DEC226800B3A99A /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CBA93711DEC226800B3A99A /* MainInterface.storyboard */; }; 30 | 3CBA93891DEC3FAE00B3A99A /* CallDirectoryHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CBA93881DEC3FAE00B3A99A /* CallDirectoryHandler.swift */; }; 31 | 3CBA938D1DEC3FAE00B3A99A /* calling.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 3CBA93861DEC3FAE00B3A99A /* calling.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 32 | 3CD72A801DED6A27008760C0 /* Dialkit.h in Headers */ = {isa = PBXBuildFile; fileRef = 3CD72A7E1DED6A27008760C0 /* Dialkit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 33 | 3CD72A831DED6A27008760C0 /* Dialkit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */; }; 34 | 3CD72A841DED6A27008760C0 /* Dialkit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 35 | 3CD72A901DED6A97008760C0 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD72A8B1DED6A97008760C0 /* Utils.swift */; }; 36 | 3CD72A911DED6A97008760C0 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD72A8B1DED6A97008760C0 /* Utils.swift */; }; 37 | 3CD72A921DED6A97008760C0 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD72A8B1DED6A97008760C0 /* Utils.swift */; }; 38 | 3CD72A931DED6A97008760C0 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD72A8B1DED6A97008760C0 /* Utils.swift */; }; 39 | 3CD72A981DED70EA008760C0 /* Contact.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CD72A971DED70EA008760C0 /* Contact.swift */; }; 40 | C4744C532B9E239B7B48F7E4 /* Pods_dialing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97FCEF9D84508A8804D1DE74 /* Pods_dialing.framework */; }; 41 | CA4637084A7C482162B0713A /* Pods_calling.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87F0CAA717EF7278279A3B9E /* Pods_calling.framework */; }; 42 | /* End PBXBuildFile section */ 43 | 44 | /* Begin PBXContainerItemProxy section */ 45 | 3C72B3CF1DFD189E00DEC065 /* PBXContainerItemProxy */ = { 46 | isa = PBXContainerItemProxy; 47 | containerPortal = 3CBA93491DEC224100B3A99A /* Project object */; 48 | proxyType = 1; 49 | remoteGlobalIDString = 3CBA93691DEC226800B3A99A; 50 | remoteInfo = dialing; 51 | }; 52 | 3CBA938B1DEC3FAE00B3A99A /* PBXContainerItemProxy */ = { 53 | isa = PBXContainerItemProxy; 54 | containerPortal = 3CBA93491DEC224100B3A99A /* Project object */; 55 | proxyType = 1; 56 | remoteGlobalIDString = 3CBA93851DEC3FAE00B3A99A; 57 | remoteInfo = calling; 58 | }; 59 | 3CD72A811DED6A27008760C0 /* PBXContainerItemProxy */ = { 60 | isa = PBXContainerItemProxy; 61 | containerPortal = 3CBA93491DEC224100B3A99A /* Project object */; 62 | proxyType = 1; 63 | remoteGlobalIDString = 3CD72A7B1DED6A27008760C0; 64 | remoteInfo = Dialkit; 65 | }; 66 | /* End PBXContainerItemProxy section */ 67 | 68 | /* Begin PBXCopyFilesBuildPhase section */ 69 | 3CBA937B1DEC226800B3A99A /* Embed App Extensions */ = { 70 | isa = PBXCopyFilesBuildPhase; 71 | buildActionMask = 2147483647; 72 | dstPath = ""; 73 | dstSubfolderSpec = 13; 74 | files = ( 75 | 3CBA938D1DEC3FAE00B3A99A /* calling.appex in Embed App Extensions */, 76 | 3C72B3CE1DFD189E00DEC065 /* dialing.appex in Embed App Extensions */, 77 | ); 78 | name = "Embed App Extensions"; 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | 3CD72A881DED6A27008760C0 /* Embed Frameworks */ = { 82 | isa = PBXCopyFilesBuildPhase; 83 | buildActionMask = 2147483647; 84 | dstPath = ""; 85 | dstSubfolderSpec = 10; 86 | files = ( 87 | 3CD72A841DED6A27008760C0 /* Dialkit.framework in Embed Frameworks */, 88 | ); 89 | name = "Embed Frameworks"; 90 | runOnlyForDeploymentPostprocessing = 0; 91 | }; 92 | /* End PBXCopyFilesBuildPhase section */ 93 | 94 | /* Begin PBXFileReference section */ 95 | 1EE23CCA9EB710DFDA3E1927 /* Pods-Dialkit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Dialkit.release.xcconfig"; path = "Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit.release.xcconfig"; sourceTree = ""; }; 96 | 26B02FA5DEE7B61CBFBBA4A3 /* Pods-Deardialing.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Deardialing.release.xcconfig"; path = "Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing.release.xcconfig"; sourceTree = ""; }; 97 | 2BA8DC30AD561CD5E1F6A553 /* Pods-Deardialing.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Deardialing.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing.debug.xcconfig"; sourceTree = ""; }; 98 | 2EAAE0480A956A39E33CE414 /* Pods-calling.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-calling.release.xcconfig"; path = "Pods/Target Support Files/Pods-calling/Pods-calling.release.xcconfig"; sourceTree = ""; }; 99 | 36772BFD9CC5F09B8B12AD8B /* Pods-Dialkit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Dialkit.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit.debug.xcconfig"; sourceTree = ""; }; 100 | 3C49D98B1E1A1E5200946A70 /* WebController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebController.swift; sourceTree = ""; }; 101 | 3C4AE8151E0FE60B008B3752 /* SettingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingController.swift; sourceTree = ""; }; 102 | 3C4AE8171E0FE6DD008B3752 /* GroupDatil.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GroupDatil.swift; sourceTree = ""; }; 103 | 3C4AE8181E0FE6DD008B3752 /* Item.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = ""; }; 104 | 3C4AE8191E0FE6DD008B3752 /* Reusable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Reusable.swift; sourceTree = ""; }; 105 | 3C4AE81A1E0FE6DD008B3752 /* UITableView+Reusable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITableView+Reusable.swift"; sourceTree = ""; }; 106 | 3C64ECDD1E0FF12B004581CB /* ItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ItemCell.swift; sourceTree = ""; }; 107 | 3C72B3CC1DFBD61500DEC065 /* UIImage+Extension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+Extension.swift"; sourceTree = ""; }; 108 | 3CBA93511DEC224100B3A99A /* Deardialing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Deardialing.app; sourceTree = BUILT_PRODUCTS_DIR; }; 109 | 3CBA93541DEC224100B3A99A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 110 | 3CBA93561DEC224100B3A99A /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 111 | 3CBA93591DEC224100B3A99A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 112 | 3CBA935B1DEC224100B3A99A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 113 | 3CBA935E1DEC224100B3A99A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 114 | 3CBA93601DEC224100B3A99A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 115 | 3CBA936A1DEC226800B3A99A /* dialing.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = dialing.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 116 | 3CBA936C1DEC226800B3A99A /* NotificationCenter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NotificationCenter.framework; path = System/Library/Frameworks/NotificationCenter.framework; sourceTree = SDKROOT; }; 117 | 3CBA936F1DEC226800B3A99A /* TodayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodayViewController.swift; sourceTree = ""; }; 118 | 3CBA93721DEC226800B3A99A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = ""; }; 119 | 3CBA93741DEC226800B3A99A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 120 | 3CBA937C1DEC26B300B3A99A /* dialing.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = dialing.entitlements; sourceTree = ""; }; 121 | 3CBA937D1DEC272E00B3A99A /* Deardialing.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Deardialing.entitlements; sourceTree = ""; }; 122 | 3CBA93861DEC3FAE00B3A99A /* calling.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = calling.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 123 | 3CBA93881DEC3FAE00B3A99A /* CallDirectoryHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallDirectoryHandler.swift; sourceTree = ""; }; 124 | 3CBA938A1DEC3FAE00B3A99A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 125 | 3CBA93911DEC403900B3A99A /* calling.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = calling.entitlements; sourceTree = ""; }; 126 | 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dialkit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 127 | 3CD72A7E1DED6A27008760C0 /* Dialkit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dialkit.h; sourceTree = ""; }; 128 | 3CD72A7F1DED6A27008760C0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 129 | 3CD72A8B1DED6A97008760C0 /* Utils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; 130 | 3CD72A971DED70EA008760C0 /* Contact.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Contact.swift; sourceTree = ""; }; 131 | 87F0CAA717EF7278279A3B9E /* Pods_calling.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_calling.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 132 | 97FCEF9D84508A8804D1DE74 /* Pods_dialing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_dialing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 133 | A0785576863807D2327A1013 /* Pods_Dialkit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Dialkit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 134 | A3DF795F9272C3305747B5B5 /* Pods-calling.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-calling.debug.xcconfig"; path = "Pods/Target Support Files/Pods-calling/Pods-calling.debug.xcconfig"; sourceTree = ""; }; 135 | A528ADDA5FC0E21E7D5945C8 /* Pods-dialing.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dialing.release.xcconfig"; path = "Pods/Target Support Files/Pods-dialing/Pods-dialing.release.xcconfig"; sourceTree = ""; }; 136 | B4D28497CB954C9DB050D97C /* Pods_Deardialing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Deardialing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 137 | F84512A6530F2A7DE14E177F /* Pods-dialing.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-dialing.debug.xcconfig"; path = "Pods/Target Support Files/Pods-dialing/Pods-dialing.debug.xcconfig"; sourceTree = ""; }; 138 | /* End PBXFileReference section */ 139 | 140 | /* Begin PBXFrameworksBuildPhase section */ 141 | 3CBA934E1DEC224100B3A99A /* Frameworks */ = { 142 | isa = PBXFrameworksBuildPhase; 143 | buildActionMask = 2147483647; 144 | files = ( 145 | 3CD72A831DED6A27008760C0 /* Dialkit.framework in Frameworks */, 146 | 0CE372624BF2A8D4D9333E5F /* Pods_Deardialing.framework in Frameworks */, 147 | ); 148 | runOnlyForDeploymentPostprocessing = 0; 149 | }; 150 | 3CBA93671DEC226800B3A99A /* Frameworks */ = { 151 | isa = PBXFrameworksBuildPhase; 152 | buildActionMask = 2147483647; 153 | files = ( 154 | 3C1A08A01DED722C001C4FF5 /* Dialkit.framework in Frameworks */, 155 | 3CBA936D1DEC226800B3A99A /* NotificationCenter.framework in Frameworks */, 156 | C4744C532B9E239B7B48F7E4 /* Pods_dialing.framework in Frameworks */, 157 | ); 158 | runOnlyForDeploymentPostprocessing = 0; 159 | }; 160 | 3CBA93831DEC3FAE00B3A99A /* Frameworks */ = { 161 | isa = PBXFrameworksBuildPhase; 162 | buildActionMask = 2147483647; 163 | files = ( 164 | CA4637084A7C482162B0713A /* Pods_calling.framework in Frameworks */, 165 | ); 166 | runOnlyForDeploymentPostprocessing = 0; 167 | }; 168 | 3CD72A781DED6A27008760C0 /* Frameworks */ = { 169 | isa = PBXFrameworksBuildPhase; 170 | buildActionMask = 2147483647; 171 | files = ( 172 | 263AE530DF8B7E0CCC9D7C40 /* Pods_Dialkit.framework in Frameworks */, 173 | ); 174 | runOnlyForDeploymentPostprocessing = 0; 175 | }; 176 | /* End PBXFrameworksBuildPhase section */ 177 | 178 | /* Begin PBXGroup section */ 179 | 3CBA93481DEC224100B3A99A = { 180 | isa = PBXGroup; 181 | children = ( 182 | 3CD72A891DED6A97008760C0 /* Utils */, 183 | 3CBA93531DEC224100B3A99A /* Deardialing */, 184 | 3CBA936E1DEC226800B3A99A /* dialing */, 185 | 3CBA93871DEC3FAE00B3A99A /* calling */, 186 | 3CD72A7D1DED6A27008760C0 /* Dialkit */, 187 | 3CBA936B1DEC226800B3A99A /* Frameworks */, 188 | 3CBA93521DEC224100B3A99A /* Products */, 189 | D51A940DE64D54E3979A5B88 /* Pods */, 190 | ); 191 | sourceTree = ""; 192 | }; 193 | 3CBA93521DEC224100B3A99A /* Products */ = { 194 | isa = PBXGroup; 195 | children = ( 196 | 3CBA93511DEC224100B3A99A /* Deardialing.app */, 197 | 3CBA936A1DEC226800B3A99A /* dialing.appex */, 198 | 3CBA93861DEC3FAE00B3A99A /* calling.appex */, 199 | 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */, 200 | ); 201 | name = Products; 202 | sourceTree = ""; 203 | }; 204 | 3CBA93531DEC224100B3A99A /* Deardialing */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 3C64ECDD1E0FF12B004581CB /* ItemCell.swift */, 208 | 3CBA937D1DEC272E00B3A99A /* Deardialing.entitlements */, 209 | 3C4AE8171E0FE6DD008B3752 /* GroupDatil.swift */, 210 | 3C4AE8181E0FE6DD008B3752 /* Item.swift */, 211 | 3C4AE8191E0FE6DD008B3752 /* Reusable.swift */, 212 | 3C4AE81A1E0FE6DD008B3752 /* UITableView+Reusable.swift */, 213 | 3CBA93541DEC224100B3A99A /* AppDelegate.swift */, 214 | 3CBA93561DEC224100B3A99A /* ViewController.swift */, 215 | 3C4AE8151E0FE60B008B3752 /* SettingController.swift */, 216 | 3CBA93581DEC224100B3A99A /* Main.storyboard */, 217 | 3CBA935B1DEC224100B3A99A /* Assets.xcassets */, 218 | 3CBA935D1DEC224100B3A99A /* LaunchScreen.storyboard */, 219 | 3CBA93601DEC224100B3A99A /* Info.plist */, 220 | 3C49D98B1E1A1E5200946A70 /* WebController.swift */, 221 | ); 222 | path = Deardialing; 223 | sourceTree = ""; 224 | }; 225 | 3CBA936B1DEC226800B3A99A /* Frameworks */ = { 226 | isa = PBXGroup; 227 | children = ( 228 | 3CBA936C1DEC226800B3A99A /* NotificationCenter.framework */, 229 | B4D28497CB954C9DB050D97C /* Pods_Deardialing.framework */, 230 | A0785576863807D2327A1013 /* Pods_Dialkit.framework */, 231 | 87F0CAA717EF7278279A3B9E /* Pods_calling.framework */, 232 | 97FCEF9D84508A8804D1DE74 /* Pods_dialing.framework */, 233 | ); 234 | name = Frameworks; 235 | sourceTree = ""; 236 | }; 237 | 3CBA936E1DEC226800B3A99A /* dialing */ = { 238 | isa = PBXGroup; 239 | children = ( 240 | 3CBA937C1DEC26B300B3A99A /* dialing.entitlements */, 241 | 3CBA936F1DEC226800B3A99A /* TodayViewController.swift */, 242 | 3CBA93711DEC226800B3A99A /* MainInterface.storyboard */, 243 | 3CBA93741DEC226800B3A99A /* Info.plist */, 244 | ); 245 | path = dialing; 246 | sourceTree = ""; 247 | }; 248 | 3CBA93871DEC3FAE00B3A99A /* calling */ = { 249 | isa = PBXGroup; 250 | children = ( 251 | 3CBA93911DEC403900B3A99A /* calling.entitlements */, 252 | 3CBA93881DEC3FAE00B3A99A /* CallDirectoryHandler.swift */, 253 | 3CBA938A1DEC3FAE00B3A99A /* Info.plist */, 254 | ); 255 | path = calling; 256 | sourceTree = ""; 257 | }; 258 | 3CD72A7D1DED6A27008760C0 /* Dialkit */ = { 259 | isa = PBXGroup; 260 | children = ( 261 | 3CD72A971DED70EA008760C0 /* Contact.swift */, 262 | 3CD72A7E1DED6A27008760C0 /* Dialkit.h */, 263 | 3CD72A7F1DED6A27008760C0 /* Info.plist */, 264 | 3C72B3CC1DFBD61500DEC065 /* UIImage+Extension.swift */, 265 | ); 266 | path = Dialkit; 267 | sourceTree = ""; 268 | }; 269 | 3CD72A891DED6A97008760C0 /* Utils */ = { 270 | isa = PBXGroup; 271 | children = ( 272 | 3CD72A8B1DED6A97008760C0 /* Utils.swift */, 273 | ); 274 | path = Utils; 275 | sourceTree = ""; 276 | }; 277 | D51A940DE64D54E3979A5B88 /* Pods */ = { 278 | isa = PBXGroup; 279 | children = ( 280 | 2BA8DC30AD561CD5E1F6A553 /* Pods-Deardialing.debug.xcconfig */, 281 | 26B02FA5DEE7B61CBFBBA4A3 /* Pods-Deardialing.release.xcconfig */, 282 | 36772BFD9CC5F09B8B12AD8B /* Pods-Dialkit.debug.xcconfig */, 283 | 1EE23CCA9EB710DFDA3E1927 /* Pods-Dialkit.release.xcconfig */, 284 | A3DF795F9272C3305747B5B5 /* Pods-calling.debug.xcconfig */, 285 | 2EAAE0480A956A39E33CE414 /* Pods-calling.release.xcconfig */, 286 | F84512A6530F2A7DE14E177F /* Pods-dialing.debug.xcconfig */, 287 | A528ADDA5FC0E21E7D5945C8 /* Pods-dialing.release.xcconfig */, 288 | ); 289 | name = Pods; 290 | sourceTree = ""; 291 | }; 292 | /* End PBXGroup section */ 293 | 294 | /* Begin PBXHeadersBuildPhase section */ 295 | 3CD72A791DED6A27008760C0 /* Headers */ = { 296 | isa = PBXHeadersBuildPhase; 297 | buildActionMask = 2147483647; 298 | files = ( 299 | 3CD72A801DED6A27008760C0 /* Dialkit.h in Headers */, 300 | ); 301 | runOnlyForDeploymentPostprocessing = 0; 302 | }; 303 | /* End PBXHeadersBuildPhase section */ 304 | 305 | /* Begin PBXNativeTarget section */ 306 | 3CBA93501DEC224100B3A99A /* Deardialing */ = { 307 | isa = PBXNativeTarget; 308 | buildConfigurationList = 3CBA93631DEC224100B3A99A /* Build configuration list for PBXNativeTarget "Deardialing" */; 309 | buildPhases = ( 310 | CE87C91CD2DF48DBCCDFCB1A /* [CP] Check Pods Manifest.lock */, 311 | 3CBA934D1DEC224100B3A99A /* Sources */, 312 | 3CBA934E1DEC224100B3A99A /* Frameworks */, 313 | 3CBA934F1DEC224100B3A99A /* Resources */, 314 | 3CBA937B1DEC226800B3A99A /* Embed App Extensions */, 315 | 3CD72A881DED6A27008760C0 /* Embed Frameworks */, 316 | 168003A288C16DA013EFAD40 /* [CP] Embed Pods Frameworks */, 317 | B3130E1970881193050C9494 /* [CP] Copy Pods Resources */, 318 | ); 319 | buildRules = ( 320 | ); 321 | dependencies = ( 322 | 3CBA938C1DEC3FAE00B3A99A /* PBXTargetDependency */, 323 | 3CD72A821DED6A27008760C0 /* PBXTargetDependency */, 324 | 3C72B3D01DFD189E00DEC065 /* PBXTargetDependency */, 325 | ); 326 | name = Deardialing; 327 | productName = Deardialing; 328 | productReference = 3CBA93511DEC224100B3A99A /* Deardialing.app */; 329 | productType = "com.apple.product-type.application"; 330 | }; 331 | 3CBA93691DEC226800B3A99A /* dialing */ = { 332 | isa = PBXNativeTarget; 333 | buildConfigurationList = 3CBA93781DEC226800B3A99A /* Build configuration list for PBXNativeTarget "dialing" */; 334 | buildPhases = ( 335 | 88AABF1132FA0FFB76620BC9 /* [CP] Check Pods Manifest.lock */, 336 | 3CBA93661DEC226800B3A99A /* Sources */, 337 | 3CBA93671DEC226800B3A99A /* Frameworks */, 338 | 3CBA93681DEC226800B3A99A /* Resources */, 339 | D9AFD0253C7A268B933B7E01 /* [CP] Copy Pods Resources */, 340 | ); 341 | buildRules = ( 342 | ); 343 | dependencies = ( 344 | ); 345 | name = dialing; 346 | productName = dialing; 347 | productReference = 3CBA936A1DEC226800B3A99A /* dialing.appex */; 348 | productType = "com.apple.product-type.app-extension"; 349 | }; 350 | 3CBA93851DEC3FAE00B3A99A /* calling */ = { 351 | isa = PBXNativeTarget; 352 | buildConfigurationList = 3CBA938E1DEC3FAE00B3A99A /* Build configuration list for PBXNativeTarget "calling" */; 353 | buildPhases = ( 354 | CA637CAFF28A7BB72EF1ED74 /* [CP] Check Pods Manifest.lock */, 355 | 3CBA93821DEC3FAE00B3A99A /* Sources */, 356 | 3CBA93831DEC3FAE00B3A99A /* Frameworks */, 357 | 3CBA93841DEC3FAE00B3A99A /* Resources */, 358 | 1D9FA22683FECA89CD35DD30 /* [CP] Copy Pods Resources */, 359 | ); 360 | buildRules = ( 361 | ); 362 | dependencies = ( 363 | ); 364 | name = calling; 365 | productName = calling; 366 | productReference = 3CBA93861DEC3FAE00B3A99A /* calling.appex */; 367 | productType = "com.apple.product-type.app-extension"; 368 | }; 369 | 3CD72A7B1DED6A27008760C0 /* Dialkit */ = { 370 | isa = PBXNativeTarget; 371 | buildConfigurationList = 3CD72A851DED6A27008760C0 /* Build configuration list for PBXNativeTarget "Dialkit" */; 372 | buildPhases = ( 373 | D92C6B4D0BD03B222CB8E4EE /* [CP] Check Pods Manifest.lock */, 374 | 3CD72A771DED6A27008760C0 /* Sources */, 375 | 3CD72A781DED6A27008760C0 /* Frameworks */, 376 | 3CD72A791DED6A27008760C0 /* Headers */, 377 | 3CD72A7A1DED6A27008760C0 /* Resources */, 378 | 9EB33825DA20020237A8A574 /* [CP] Copy Pods Resources */, 379 | ); 380 | buildRules = ( 381 | ); 382 | dependencies = ( 383 | ); 384 | name = Dialkit; 385 | productName = Dialkit; 386 | productReference = 3CD72A7C1DED6A27008760C0 /* Dialkit.framework */; 387 | productType = "com.apple.product-type.framework"; 388 | }; 389 | /* End PBXNativeTarget section */ 390 | 391 | /* Begin PBXProject section */ 392 | 3CBA93491DEC224100B3A99A /* Project object */ = { 393 | isa = PBXProject; 394 | attributes = { 395 | LastSwiftUpdateCheck = 0810; 396 | LastUpgradeCheck = 0810; 397 | ORGANIZATIONNAME = KingCQ; 398 | TargetAttributes = { 399 | 3CBA93501DEC224100B3A99A = { 400 | CreatedOnToolsVersion = 8.1; 401 | DevelopmentTeam = 46A8679957; 402 | ProvisioningStyle = Automatic; 403 | SystemCapabilities = { 404 | com.apple.ApplicationGroups.iOS = { 405 | enabled = 1; 406 | }; 407 | }; 408 | }; 409 | 3CBA93691DEC226800B3A99A = { 410 | CreatedOnToolsVersion = 8.1; 411 | DevelopmentTeam = 46A8679957; 412 | ProvisioningStyle = Automatic; 413 | SystemCapabilities = { 414 | com.apple.ApplicationGroups.iOS = { 415 | enabled = 1; 416 | }; 417 | }; 418 | }; 419 | 3CBA93851DEC3FAE00B3A99A = { 420 | CreatedOnToolsVersion = 8.1; 421 | DevelopmentTeam = 46A8679957; 422 | ProvisioningStyle = Automatic; 423 | SystemCapabilities = { 424 | com.apple.ApplicationGroups.iOS = { 425 | enabled = 1; 426 | }; 427 | }; 428 | }; 429 | 3CD72A7B1DED6A27008760C0 = { 430 | CreatedOnToolsVersion = 8.1; 431 | DevelopmentTeam = 46A8679957; 432 | ProvisioningStyle = Automatic; 433 | }; 434 | }; 435 | }; 436 | buildConfigurationList = 3CBA934C1DEC224100B3A99A /* Build configuration list for PBXProject "Deardialing" */; 437 | compatibilityVersion = "Xcode 3.2"; 438 | developmentRegion = English; 439 | hasScannedForEncodings = 0; 440 | knownRegions = ( 441 | en, 442 | Base, 443 | ); 444 | mainGroup = 3CBA93481DEC224100B3A99A; 445 | productRefGroup = 3CBA93521DEC224100B3A99A /* Products */; 446 | projectDirPath = ""; 447 | projectRoot = ""; 448 | targets = ( 449 | 3CBA93501DEC224100B3A99A /* Deardialing */, 450 | 3CBA93691DEC226800B3A99A /* dialing */, 451 | 3CBA93851DEC3FAE00B3A99A /* calling */, 452 | 3CD72A7B1DED6A27008760C0 /* Dialkit */, 453 | ); 454 | }; 455 | /* End PBXProject section */ 456 | 457 | /* Begin PBXResourcesBuildPhase section */ 458 | 3CBA934F1DEC224100B3A99A /* Resources */ = { 459 | isa = PBXResourcesBuildPhase; 460 | buildActionMask = 2147483647; 461 | files = ( 462 | 3CBA935F1DEC224100B3A99A /* LaunchScreen.storyboard in Resources */, 463 | 3CBA935C1DEC224100B3A99A /* Assets.xcassets in Resources */, 464 | 3CBA935A1DEC224100B3A99A /* Main.storyboard in Resources */, 465 | ); 466 | runOnlyForDeploymentPostprocessing = 0; 467 | }; 468 | 3CBA93681DEC226800B3A99A /* Resources */ = { 469 | isa = PBXResourcesBuildPhase; 470 | buildActionMask = 2147483647; 471 | files = ( 472 | 3CBA93731DEC226800B3A99A /* MainInterface.storyboard in Resources */, 473 | ); 474 | runOnlyForDeploymentPostprocessing = 0; 475 | }; 476 | 3CBA93841DEC3FAE00B3A99A /* Resources */ = { 477 | isa = PBXResourcesBuildPhase; 478 | buildActionMask = 2147483647; 479 | files = ( 480 | ); 481 | runOnlyForDeploymentPostprocessing = 0; 482 | }; 483 | 3CD72A7A1DED6A27008760C0 /* Resources */ = { 484 | isa = PBXResourcesBuildPhase; 485 | buildActionMask = 2147483647; 486 | files = ( 487 | ); 488 | runOnlyForDeploymentPostprocessing = 0; 489 | }; 490 | /* End PBXResourcesBuildPhase section */ 491 | 492 | /* Begin PBXShellScriptBuildPhase section */ 493 | 168003A288C16DA013EFAD40 /* [CP] Embed Pods Frameworks */ = { 494 | isa = PBXShellScriptBuildPhase; 495 | buildActionMask = 2147483647; 496 | files = ( 497 | ); 498 | inputPaths = ( 499 | ); 500 | name = "[CP] Embed Pods Frameworks"; 501 | outputPaths = ( 502 | ); 503 | runOnlyForDeploymentPostprocessing = 0; 504 | shellPath = /bin/sh; 505 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-frameworks.sh\"\n"; 506 | showEnvVarsInLog = 0; 507 | }; 508 | 1D9FA22683FECA89CD35DD30 /* [CP] Copy Pods Resources */ = { 509 | isa = PBXShellScriptBuildPhase; 510 | buildActionMask = 2147483647; 511 | files = ( 512 | ); 513 | inputPaths = ( 514 | ); 515 | name = "[CP] Copy Pods Resources"; 516 | outputPaths = ( 517 | ); 518 | runOnlyForDeploymentPostprocessing = 0; 519 | shellPath = /bin/sh; 520 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-calling/Pods-calling-resources.sh\"\n"; 521 | showEnvVarsInLog = 0; 522 | }; 523 | 88AABF1132FA0FFB76620BC9 /* [CP] Check Pods Manifest.lock */ = { 524 | isa = PBXShellScriptBuildPhase; 525 | buildActionMask = 2147483647; 526 | files = ( 527 | ); 528 | inputPaths = ( 529 | ); 530 | name = "[CP] Check Pods Manifest.lock"; 531 | outputPaths = ( 532 | ); 533 | runOnlyForDeploymentPostprocessing = 0; 534 | shellPath = /bin/sh; 535 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 536 | showEnvVarsInLog = 0; 537 | }; 538 | 9EB33825DA20020237A8A574 /* [CP] Copy Pods Resources */ = { 539 | isa = PBXShellScriptBuildPhase; 540 | buildActionMask = 2147483647; 541 | files = ( 542 | ); 543 | inputPaths = ( 544 | ); 545 | name = "[CP] Copy Pods Resources"; 546 | outputPaths = ( 547 | ); 548 | runOnlyForDeploymentPostprocessing = 0; 549 | shellPath = /bin/sh; 550 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-resources.sh\"\n"; 551 | showEnvVarsInLog = 0; 552 | }; 553 | B3130E1970881193050C9494 /* [CP] Copy Pods Resources */ = { 554 | isa = PBXShellScriptBuildPhase; 555 | buildActionMask = 2147483647; 556 | files = ( 557 | ); 558 | inputPaths = ( 559 | ); 560 | name = "[CP] Copy Pods Resources"; 561 | outputPaths = ( 562 | ); 563 | runOnlyForDeploymentPostprocessing = 0; 564 | shellPath = /bin/sh; 565 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-resources.sh\"\n"; 566 | showEnvVarsInLog = 0; 567 | }; 568 | CA637CAFF28A7BB72EF1ED74 /* [CP] Check Pods Manifest.lock */ = { 569 | isa = PBXShellScriptBuildPhase; 570 | buildActionMask = 2147483647; 571 | files = ( 572 | ); 573 | inputPaths = ( 574 | ); 575 | name = "[CP] Check Pods Manifest.lock"; 576 | outputPaths = ( 577 | ); 578 | runOnlyForDeploymentPostprocessing = 0; 579 | shellPath = /bin/sh; 580 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 581 | showEnvVarsInLog = 0; 582 | }; 583 | CE87C91CD2DF48DBCCDFCB1A /* [CP] Check Pods Manifest.lock */ = { 584 | isa = PBXShellScriptBuildPhase; 585 | buildActionMask = 2147483647; 586 | files = ( 587 | ); 588 | inputPaths = ( 589 | ); 590 | name = "[CP] Check Pods Manifest.lock"; 591 | outputPaths = ( 592 | ); 593 | runOnlyForDeploymentPostprocessing = 0; 594 | shellPath = /bin/sh; 595 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 596 | showEnvVarsInLog = 0; 597 | }; 598 | D92C6B4D0BD03B222CB8E4EE /* [CP] Check Pods Manifest.lock */ = { 599 | isa = PBXShellScriptBuildPhase; 600 | buildActionMask = 2147483647; 601 | files = ( 602 | ); 603 | inputPaths = ( 604 | ); 605 | name = "[CP] Check Pods Manifest.lock"; 606 | outputPaths = ( 607 | ); 608 | runOnlyForDeploymentPostprocessing = 0; 609 | shellPath = /bin/sh; 610 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 611 | showEnvVarsInLog = 0; 612 | }; 613 | D9AFD0253C7A268B933B7E01 /* [CP] Copy Pods Resources */ = { 614 | isa = PBXShellScriptBuildPhase; 615 | buildActionMask = 2147483647; 616 | files = ( 617 | ); 618 | inputPaths = ( 619 | ); 620 | name = "[CP] Copy Pods Resources"; 621 | outputPaths = ( 622 | ); 623 | runOnlyForDeploymentPostprocessing = 0; 624 | shellPath = /bin/sh; 625 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-dialing/Pods-dialing-resources.sh\"\n"; 626 | showEnvVarsInLog = 0; 627 | }; 628 | /* End PBXShellScriptBuildPhase section */ 629 | 630 | /* Begin PBXSourcesBuildPhase section */ 631 | 3CBA934D1DEC224100B3A99A /* Sources */ = { 632 | isa = PBXSourcesBuildPhase; 633 | buildActionMask = 2147483647; 634 | files = ( 635 | 3C4AE8161E0FE60B008B3752 /* SettingController.swift in Sources */, 636 | 3CBA93571DEC224100B3A99A /* ViewController.swift in Sources */, 637 | 3C49D98C1E1A1E5200946A70 /* WebController.swift in Sources */, 638 | 3C4AE81B1E0FE6DD008B3752 /* GroupDatil.swift in Sources */, 639 | 3CBA93551DEC224100B3A99A /* AppDelegate.swift in Sources */, 640 | 3C64ECDE1E0FF12B004581CB /* ItemCell.swift in Sources */, 641 | 3C4AE81E1E0FE6DD008B3752 /* UITableView+Reusable.swift in Sources */, 642 | 3C4AE81C1E0FE6DD008B3752 /* Item.swift in Sources */, 643 | 3CD72A901DED6A97008760C0 /* Utils.swift in Sources */, 644 | 3C4AE81D1E0FE6DD008B3752 /* Reusable.swift in Sources */, 645 | ); 646 | runOnlyForDeploymentPostprocessing = 0; 647 | }; 648 | 3CBA93661DEC226800B3A99A /* Sources */ = { 649 | isa = PBXSourcesBuildPhase; 650 | buildActionMask = 2147483647; 651 | files = ( 652 | 3CBA93701DEC226800B3A99A /* TodayViewController.swift in Sources */, 653 | 3CD72A911DED6A97008760C0 /* Utils.swift in Sources */, 654 | ); 655 | runOnlyForDeploymentPostprocessing = 0; 656 | }; 657 | 3CBA93821DEC3FAE00B3A99A /* Sources */ = { 658 | isa = PBXSourcesBuildPhase; 659 | buildActionMask = 2147483647; 660 | files = ( 661 | 3CBA93891DEC3FAE00B3A99A /* CallDirectoryHandler.swift in Sources */, 662 | 3CD72A921DED6A97008760C0 /* Utils.swift in Sources */, 663 | ); 664 | runOnlyForDeploymentPostprocessing = 0; 665 | }; 666 | 3CD72A771DED6A27008760C0 /* Sources */ = { 667 | isa = PBXSourcesBuildPhase; 668 | buildActionMask = 2147483647; 669 | files = ( 670 | 3C72B3CD1DFBD61500DEC065 /* UIImage+Extension.swift in Sources */, 671 | 3CD72A981DED70EA008760C0 /* Contact.swift in Sources */, 672 | 3CD72A931DED6A97008760C0 /* Utils.swift in Sources */, 673 | ); 674 | runOnlyForDeploymentPostprocessing = 0; 675 | }; 676 | /* End PBXSourcesBuildPhase section */ 677 | 678 | /* Begin PBXTargetDependency section */ 679 | 3C72B3D01DFD189E00DEC065 /* PBXTargetDependency */ = { 680 | isa = PBXTargetDependency; 681 | target = 3CBA93691DEC226800B3A99A /* dialing */; 682 | targetProxy = 3C72B3CF1DFD189E00DEC065 /* PBXContainerItemProxy */; 683 | }; 684 | 3CBA938C1DEC3FAE00B3A99A /* PBXTargetDependency */ = { 685 | isa = PBXTargetDependency; 686 | target = 3CBA93851DEC3FAE00B3A99A /* calling */; 687 | targetProxy = 3CBA938B1DEC3FAE00B3A99A /* PBXContainerItemProxy */; 688 | }; 689 | 3CD72A821DED6A27008760C0 /* PBXTargetDependency */ = { 690 | isa = PBXTargetDependency; 691 | target = 3CD72A7B1DED6A27008760C0 /* Dialkit */; 692 | targetProxy = 3CD72A811DED6A27008760C0 /* PBXContainerItemProxy */; 693 | }; 694 | /* End PBXTargetDependency section */ 695 | 696 | /* Begin PBXVariantGroup section */ 697 | 3CBA93581DEC224100B3A99A /* Main.storyboard */ = { 698 | isa = PBXVariantGroup; 699 | children = ( 700 | 3CBA93591DEC224100B3A99A /* Base */, 701 | ); 702 | name = Main.storyboard; 703 | sourceTree = ""; 704 | }; 705 | 3CBA935D1DEC224100B3A99A /* LaunchScreen.storyboard */ = { 706 | isa = PBXVariantGroup; 707 | children = ( 708 | 3CBA935E1DEC224100B3A99A /* Base */, 709 | ); 710 | name = LaunchScreen.storyboard; 711 | sourceTree = ""; 712 | }; 713 | 3CBA93711DEC226800B3A99A /* MainInterface.storyboard */ = { 714 | isa = PBXVariantGroup; 715 | children = ( 716 | 3CBA93721DEC226800B3A99A /* Base */, 717 | ); 718 | name = MainInterface.storyboard; 719 | sourceTree = ""; 720 | }; 721 | /* End PBXVariantGroup section */ 722 | 723 | /* Begin XCBuildConfiguration section */ 724 | 3CBA93611DEC224100B3A99A /* Debug */ = { 725 | isa = XCBuildConfiguration; 726 | buildSettings = { 727 | ALWAYS_SEARCH_USER_PATHS = NO; 728 | CLANG_ANALYZER_NONNULL = YES; 729 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 730 | CLANG_CXX_LIBRARY = "libc++"; 731 | CLANG_ENABLE_MODULES = YES; 732 | CLANG_ENABLE_OBJC_ARC = YES; 733 | CLANG_WARN_BOOL_CONVERSION = YES; 734 | CLANG_WARN_CONSTANT_CONVERSION = YES; 735 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 736 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 737 | CLANG_WARN_EMPTY_BODY = YES; 738 | CLANG_WARN_ENUM_CONVERSION = YES; 739 | CLANG_WARN_INFINITE_RECURSION = YES; 740 | CLANG_WARN_INT_CONVERSION = YES; 741 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 742 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 743 | CLANG_WARN_UNREACHABLE_CODE = YES; 744 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 745 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 746 | COPY_PHASE_STRIP = NO; 747 | DEBUG_INFORMATION_FORMAT = dwarf; 748 | ENABLE_STRICT_OBJC_MSGSEND = YES; 749 | ENABLE_TESTABILITY = YES; 750 | GCC_C_LANGUAGE_STANDARD = gnu99; 751 | GCC_DYNAMIC_NO_PIC = NO; 752 | GCC_NO_COMMON_BLOCKS = YES; 753 | GCC_OPTIMIZATION_LEVEL = 0; 754 | GCC_PREPROCESSOR_DEFINITIONS = ( 755 | "DEBUG=1", 756 | "$(inherited)", 757 | ); 758 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 759 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 760 | GCC_WARN_UNDECLARED_SELECTOR = YES; 761 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 762 | GCC_WARN_UNUSED_FUNCTION = YES; 763 | GCC_WARN_UNUSED_VARIABLE = YES; 764 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 765 | MTL_ENABLE_DEBUG_INFO = YES; 766 | ONLY_ACTIVE_ARCH = YES; 767 | SDKROOT = iphoneos; 768 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 769 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 770 | TARGETED_DEVICE_FAMILY = "1,2"; 771 | }; 772 | name = Debug; 773 | }; 774 | 3CBA93621DEC224100B3A99A /* Release */ = { 775 | isa = XCBuildConfiguration; 776 | buildSettings = { 777 | ALWAYS_SEARCH_USER_PATHS = NO; 778 | CLANG_ANALYZER_NONNULL = YES; 779 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 780 | CLANG_CXX_LIBRARY = "libc++"; 781 | CLANG_ENABLE_MODULES = YES; 782 | CLANG_ENABLE_OBJC_ARC = YES; 783 | CLANG_WARN_BOOL_CONVERSION = YES; 784 | CLANG_WARN_CONSTANT_CONVERSION = YES; 785 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 786 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 787 | CLANG_WARN_EMPTY_BODY = YES; 788 | CLANG_WARN_ENUM_CONVERSION = YES; 789 | CLANG_WARN_INFINITE_RECURSION = YES; 790 | CLANG_WARN_INT_CONVERSION = YES; 791 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 792 | CLANG_WARN_SUSPICIOUS_MOVES = YES; 793 | CLANG_WARN_UNREACHABLE_CODE = YES; 794 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 795 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 796 | COPY_PHASE_STRIP = NO; 797 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 798 | ENABLE_NS_ASSERTIONS = NO; 799 | ENABLE_STRICT_OBJC_MSGSEND = YES; 800 | GCC_C_LANGUAGE_STANDARD = gnu99; 801 | GCC_NO_COMMON_BLOCKS = YES; 802 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 803 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 804 | GCC_WARN_UNDECLARED_SELECTOR = YES; 805 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 806 | GCC_WARN_UNUSED_FUNCTION = YES; 807 | GCC_WARN_UNUSED_VARIABLE = YES; 808 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 809 | MTL_ENABLE_DEBUG_INFO = NO; 810 | SDKROOT = iphoneos; 811 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 812 | TARGETED_DEVICE_FAMILY = "1,2"; 813 | VALIDATE_PRODUCT = YES; 814 | }; 815 | name = Release; 816 | }; 817 | 3CBA93641DEC224100B3A99A /* Debug */ = { 818 | isa = XCBuildConfiguration; 819 | baseConfigurationReference = 2BA8DC30AD561CD5E1F6A553 /* Pods-Deardialing.debug.xcconfig */; 820 | buildSettings = { 821 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 822 | APP_DISPLAY_NAME = "快速拨号"; 823 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 824 | CODE_SIGN_ENTITLEMENTS = Deardialing/Deardialing.entitlements; 825 | DEVELOPMENT_TEAM = 46A8679957; 826 | INFOPLIST_FILE = Deardialing/Info.plist; 827 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 828 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 829 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing; 830 | PRODUCT_NAME = "$(TARGET_NAME)"; 831 | SWIFT_VERSION = 3.0; 832 | }; 833 | name = Debug; 834 | }; 835 | 3CBA93651DEC224100B3A99A /* Release */ = { 836 | isa = XCBuildConfiguration; 837 | baseConfigurationReference = 26B02FA5DEE7B61CBFBBA4A3 /* Pods-Deardialing.release.xcconfig */; 838 | buildSettings = { 839 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 840 | APP_DISPLAY_NAME = "快速拨号"; 841 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 842 | CODE_SIGN_ENTITLEMENTS = Deardialing/Deardialing.entitlements; 843 | DEVELOPMENT_TEAM = 46A8679957; 844 | INFOPLIST_FILE = Deardialing/Info.plist; 845 | IPHONEOS_DEPLOYMENT_TARGET = 9.1; 846 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 847 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing; 848 | PRODUCT_NAME = "$(TARGET_NAME)"; 849 | SWIFT_VERSION = 3.0; 850 | }; 851 | name = Release; 852 | }; 853 | 3CBA93791DEC226800B3A99A /* Debug */ = { 854 | isa = XCBuildConfiguration; 855 | baseConfigurationReference = F84512A6530F2A7DE14E177F /* Pods-dialing.debug.xcconfig */; 856 | buildSettings = { 857 | CODE_SIGN_ENTITLEMENTS = dialing/dialing.entitlements; 858 | DEVELOPMENT_TEAM = 46A8679957; 859 | INFOPLIST_FILE = dialing/Info.plist; 860 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 861 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing.dialing; 862 | PRODUCT_NAME = "$(TARGET_NAME)"; 863 | SKIP_INSTALL = YES; 864 | SWIFT_VERSION = 3.0; 865 | Today_DISPLAY_NAME = "快速拨号"; 866 | }; 867 | name = Debug; 868 | }; 869 | 3CBA937A1DEC226800B3A99A /* Release */ = { 870 | isa = XCBuildConfiguration; 871 | baseConfigurationReference = A528ADDA5FC0E21E7D5945C8 /* Pods-dialing.release.xcconfig */; 872 | buildSettings = { 873 | CODE_SIGN_ENTITLEMENTS = dialing/dialing.entitlements; 874 | DEVELOPMENT_TEAM = 46A8679957; 875 | INFOPLIST_FILE = dialing/Info.plist; 876 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 877 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing.dialing; 878 | PRODUCT_NAME = "$(TARGET_NAME)"; 879 | SKIP_INSTALL = YES; 880 | SWIFT_VERSION = 3.0; 881 | Today_DISPLAY_NAME = "快速拨号"; 882 | }; 883 | name = Release; 884 | }; 885 | 3CBA938F1DEC3FAE00B3A99A /* Debug */ = { 886 | isa = XCBuildConfiguration; 887 | baseConfigurationReference = A3DF795F9272C3305747B5B5 /* Pods-calling.debug.xcconfig */; 888 | buildSettings = { 889 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 890 | CODE_SIGN_ENTITLEMENTS = calling/calling.entitlements; 891 | DEVELOPMENT_TEAM = 46A8679957; 892 | INFOPLIST_FILE = calling/Info.plist; 893 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 894 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing.calling; 895 | PRODUCT_NAME = "$(TARGET_NAME)"; 896 | SKIP_INSTALL = YES; 897 | SWIFT_VERSION = 3.0; 898 | }; 899 | name = Debug; 900 | }; 901 | 3CBA93901DEC3FAE00B3A99A /* Release */ = { 902 | isa = XCBuildConfiguration; 903 | baseConfigurationReference = 2EAAE0480A956A39E33CE414 /* Pods-calling.release.xcconfig */; 904 | buildSettings = { 905 | ARCHS = "$(ARCHS_STANDARD_64_BIT)"; 906 | CODE_SIGN_ENTITLEMENTS = calling/calling.entitlements; 907 | DEVELOPMENT_TEAM = 46A8679957; 908 | INFOPLIST_FILE = calling/Info.plist; 909 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; 910 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Deardialing.calling; 911 | PRODUCT_NAME = "$(TARGET_NAME)"; 912 | SKIP_INSTALL = YES; 913 | SWIFT_VERSION = 3.0; 914 | }; 915 | name = Release; 916 | }; 917 | 3CD72A861DED6A27008760C0 /* Debug */ = { 918 | isa = XCBuildConfiguration; 919 | baseConfigurationReference = 36772BFD9CC5F09B8B12AD8B /* Pods-Dialkit.debug.xcconfig */; 920 | buildSettings = { 921 | CODE_SIGN_IDENTITY = ""; 922 | CURRENT_PROJECT_VERSION = 1; 923 | DEFINES_MODULE = YES; 924 | DEVELOPMENT_TEAM = 46A8679957; 925 | DYLIB_COMPATIBILITY_VERSION = 1; 926 | DYLIB_CURRENT_VERSION = 1; 927 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 928 | INFOPLIST_FILE = Dialkit/Info.plist; 929 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 930 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 931 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Dialkit; 932 | PRODUCT_NAME = "$(TARGET_NAME)"; 933 | SKIP_INSTALL = YES; 934 | SWIFT_VERSION = 3.0; 935 | VERSIONING_SYSTEM = "apple-generic"; 936 | VERSION_INFO_PREFIX = ""; 937 | }; 938 | name = Debug; 939 | }; 940 | 3CD72A871DED6A27008760C0 /* Release */ = { 941 | isa = XCBuildConfiguration; 942 | baseConfigurationReference = 1EE23CCA9EB710DFDA3E1927 /* Pods-Dialkit.release.xcconfig */; 943 | buildSettings = { 944 | CODE_SIGN_IDENTITY = ""; 945 | CURRENT_PROJECT_VERSION = 1; 946 | DEFINES_MODULE = YES; 947 | DEVELOPMENT_TEAM = 46A8679957; 948 | DYLIB_COMPATIBILITY_VERSION = 1; 949 | DYLIB_CURRENT_VERSION = 1; 950 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 951 | INFOPLIST_FILE = Dialkit/Info.plist; 952 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 953 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 954 | PRODUCT_BUNDLE_IDENTIFIER = com.KingCQ.Dialkit; 955 | PRODUCT_NAME = "$(TARGET_NAME)"; 956 | SKIP_INSTALL = YES; 957 | SWIFT_VERSION = 3.0; 958 | VERSIONING_SYSTEM = "apple-generic"; 959 | VERSION_INFO_PREFIX = ""; 960 | }; 961 | name = Release; 962 | }; 963 | /* End XCBuildConfiguration section */ 964 | 965 | /* Begin XCConfigurationList section */ 966 | 3CBA934C1DEC224100B3A99A /* Build configuration list for PBXProject "Deardialing" */ = { 967 | isa = XCConfigurationList; 968 | buildConfigurations = ( 969 | 3CBA93611DEC224100B3A99A /* Debug */, 970 | 3CBA93621DEC224100B3A99A /* Release */, 971 | ); 972 | defaultConfigurationIsVisible = 0; 973 | defaultConfigurationName = Release; 974 | }; 975 | 3CBA93631DEC224100B3A99A /* Build configuration list for PBXNativeTarget "Deardialing" */ = { 976 | isa = XCConfigurationList; 977 | buildConfigurations = ( 978 | 3CBA93641DEC224100B3A99A /* Debug */, 979 | 3CBA93651DEC224100B3A99A /* Release */, 980 | ); 981 | defaultConfigurationIsVisible = 0; 982 | defaultConfigurationName = Release; 983 | }; 984 | 3CBA93781DEC226800B3A99A /* Build configuration list for PBXNativeTarget "dialing" */ = { 985 | isa = XCConfigurationList; 986 | buildConfigurations = ( 987 | 3CBA93791DEC226800B3A99A /* Debug */, 988 | 3CBA937A1DEC226800B3A99A /* Release */, 989 | ); 990 | defaultConfigurationIsVisible = 0; 991 | defaultConfigurationName = Release; 992 | }; 993 | 3CBA938E1DEC3FAE00B3A99A /* Build configuration list for PBXNativeTarget "calling" */ = { 994 | isa = XCConfigurationList; 995 | buildConfigurations = ( 996 | 3CBA938F1DEC3FAE00B3A99A /* Debug */, 997 | 3CBA93901DEC3FAE00B3A99A /* Release */, 998 | ); 999 | defaultConfigurationIsVisible = 0; 1000 | defaultConfigurationName = Release; 1001 | }; 1002 | 3CD72A851DED6A27008760C0 /* Build configuration list for PBXNativeTarget "Dialkit" */ = { 1003 | isa = XCConfigurationList; 1004 | buildConfigurations = ( 1005 | 3CD72A861DED6A27008760C0 /* Debug */, 1006 | 3CD72A871DED6A27008760C0 /* Release */, 1007 | ); 1008 | defaultConfigurationIsVisible = 0; 1009 | defaultConfigurationName = Release; 1010 | }; 1011 | /* End XCConfigurationList section */ 1012 | }; 1013 | rootObject = 3CBA93491DEC224100B3A99A /* Project object */; 1014 | } 1015 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/xcshareddata/xcschemes/Deardialing.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/xcshareddata/xcschemes/Dialkit.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 70 | 71 | 72 | 73 | 75 | 76 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/xcshareddata/xcschemes/calling.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 70 | 72 | 78 | 79 | 80 | 81 | 82 | 83 | 90 | 92 | 98 | 99 | 100 | 101 | 103 | 104 | 107 | 108 | 109 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcodeproj/xcshareddata/xcschemes/dialing.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 16 | 22 | 23 | 24 | 30 | 36 | 37 | 38 | 39 | 40 | 45 | 46 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 70 | 73 | 79 | 80 | 81 | 82 | 88 | 89 | 90 | 91 | 92 | 93 | 100 | 102 | 108 | 109 | 110 | 111 | 113 | 114 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /Deardialing/Deardialing.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/11/28. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | } 23 | 24 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "size" : "20x20", 10 | "idiom" : "iphone", 11 | "filename" : "Icon-60.png", 12 | "scale" : "3x" 13 | }, 14 | { 15 | "idiom" : "iphone", 16 | "size" : "29x29", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "idiom" : "iphone", 21 | "size" : "29x29", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "idiom" : "iphone", 26 | "size" : "29x29", 27 | "scale" : "3x" 28 | }, 29 | { 30 | "size" : "40x40", 31 | "idiom" : "iphone", 32 | "filename" : "Icon-80.png", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "idiom" : "iphone", 37 | "size" : "40x40", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "size" : "57x57", 42 | "idiom" : "iphone", 43 | "filename" : "Icon-57.png", 44 | "scale" : "1x" 45 | }, 46 | { 47 | "size" : "57x57", 48 | "idiom" : "iphone", 49 | "filename" : "Icon-114.png", 50 | "scale" : "2x" 51 | }, 52 | { 53 | "idiom" : "iphone", 54 | "size" : "60x60", 55 | "scale" : "2x" 56 | }, 57 | { 58 | "idiom" : "iphone", 59 | "size" : "60x60", 60 | "scale" : "3x" 61 | }, 62 | { 63 | "idiom" : "ipad", 64 | "size" : "20x20", 65 | "scale" : "1x" 66 | }, 67 | { 68 | "idiom" : "ipad", 69 | "size" : "20x20", 70 | "scale" : "2x" 71 | }, 72 | { 73 | "size" : "29x29", 74 | "idiom" : "ipad", 75 | "filename" : "Icon-29.png", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "size" : "29x29", 80 | "idiom" : "ipad", 81 | "filename" : "Icon-58.png", 82 | "scale" : "2x" 83 | }, 84 | { 85 | "size" : "40x40", 86 | "idiom" : "ipad", 87 | "filename" : "Icon-40.png", 88 | "scale" : "1x" 89 | }, 90 | { 91 | "idiom" : "ipad", 92 | "size" : "40x40", 93 | "scale" : "2x" 94 | }, 95 | { 96 | "size" : "50x50", 97 | "idiom" : "ipad", 98 | "filename" : "Icon-50.png", 99 | "scale" : "1x" 100 | }, 101 | { 102 | "size" : "50x50", 103 | "idiom" : "ipad", 104 | "filename" : "Icon-100.png", 105 | "scale" : "2x" 106 | }, 107 | { 108 | "size" : "72x72", 109 | "idiom" : "ipad", 110 | "filename" : "Icon-72.png", 111 | "scale" : "1x" 112 | }, 113 | { 114 | "size" : "72x72", 115 | "idiom" : "ipad", 116 | "filename" : "Icon-144.png", 117 | "scale" : "2x" 118 | }, 119 | { 120 | "size" : "76x76", 121 | "idiom" : "ipad", 122 | "filename" : "Icon-76.png", 123 | "scale" : "1x" 124 | }, 125 | { 126 | "size" : "76x76", 127 | "idiom" : "ipad", 128 | "filename" : "Icon-152.png", 129 | "scale" : "2x" 130 | }, 131 | { 132 | "size" : "83.5x83.5", 133 | "idiom" : "ipad", 134 | "filename" : "Icon-167.png", 135 | "scale" : "2x" 136 | }, 137 | { 138 | "size" : "60x60", 139 | "idiom" : "car", 140 | "filename" : "Icon-120.png", 141 | "scale" : "2x" 142 | }, 143 | { 144 | "size" : "60x60", 145 | "idiom" : "car", 146 | "filename" : "Icon-180.png", 147 | "scale" : "3x" 148 | }, 149 | { 150 | "size" : "24x24", 151 | "idiom" : "watch", 152 | "filename" : "Icon-48.png", 153 | "scale" : "2x", 154 | "role" : "notificationCenter", 155 | "subtype" : "38mm" 156 | }, 157 | { 158 | "size" : "27.5x27.5", 159 | "idiom" : "watch", 160 | "scale" : "2x", 161 | "role" : "notificationCenter", 162 | "subtype" : "42mm" 163 | }, 164 | { 165 | "size" : "29x29", 166 | "idiom" : "watch", 167 | "role" : "companionSettings", 168 | "scale" : "2x" 169 | }, 170 | { 171 | "size" : "29x29", 172 | "idiom" : "watch", 173 | "filename" : "Icon-87.png", 174 | "role" : "companionSettings", 175 | "scale" : "3x" 176 | }, 177 | { 178 | "size" : "40x40", 179 | "idiom" : "watch", 180 | "scale" : "2x", 181 | "role" : "appLauncher", 182 | "subtype" : "38mm" 183 | }, 184 | { 185 | "size" : "86x86", 186 | "idiom" : "watch", 187 | "scale" : "2x", 188 | "role" : "quickLook", 189 | "subtype" : "38mm" 190 | }, 191 | { 192 | "size" : "98x98", 193 | "idiom" : "watch", 194 | "scale" : "2x", 195 | "role" : "quickLook", 196 | "subtype" : "42mm" 197 | }, 198 | { 199 | "size" : "16x16", 200 | "idiom" : "mac", 201 | "filename" : "Icon-16.png", 202 | "scale" : "1x" 203 | }, 204 | { 205 | "size" : "16x16", 206 | "idiom" : "mac", 207 | "filename" : "Icon-32.png", 208 | "scale" : "2x" 209 | }, 210 | { 211 | "idiom" : "mac", 212 | "size" : "32x32", 213 | "scale" : "1x" 214 | }, 215 | { 216 | "size" : "32x32", 217 | "idiom" : "mac", 218 | "filename" : "Icon-64.png", 219 | "scale" : "2x" 220 | }, 221 | { 222 | "size" : "128x128", 223 | "idiom" : "mac", 224 | "filename" : "Icon-128.png", 225 | "scale" : "1x" 226 | }, 227 | { 228 | "idiom" : "mac", 229 | "size" : "128x128", 230 | "scale" : "2x" 231 | }, 232 | { 233 | "size" : "256x256", 234 | "idiom" : "mac", 235 | "filename" : "Icon-256.png", 236 | "scale" : "1x" 237 | }, 238 | { 239 | "size" : "256x256", 240 | "idiom" : "mac", 241 | "filename" : "Icon-512.png", 242 | "scale" : "2x" 243 | }, 244 | { 245 | "idiom" : "mac", 246 | "size" : "512x512", 247 | "scale" : "1x" 248 | }, 249 | { 250 | "idiom" : "mac", 251 | "size" : "512x512", 252 | "scale" : "2x" 253 | }, 254 | { 255 | "filename" : "Icon-28.png", 256 | "unassigned" : true 257 | }, 258 | { 259 | "filename" : "Icon-90.png", 260 | "unassigned" : true 261 | }, 262 | { 263 | "filename" : "Icon-96.png", 264 | "unassigned" : true 265 | }, 266 | { 267 | "filename" : "Icon-108.png", 268 | "unassigned" : true 269 | }, 270 | { 271 | "filename" : "Icon-155.png", 272 | "unassigned" : true 273 | }, 274 | { 275 | "filename" : "Icon-192.png", 276 | "unassigned" : true 277 | } 278 | ], 279 | "info" : { 280 | "version" : 1, 281 | "author" : "xcode" 282 | } 283 | } -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-100.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-108.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-114.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-120.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-128.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-144.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-152.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-155.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-16.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-167.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-180.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-192.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-256.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-28.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-29.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-32.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-40.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-48.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-50.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-512.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-57.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-58.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-60.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-64.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-72.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-76.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-80.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-87.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-90.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CNKCQ/Deardialing/7a538af79ccec4939472e47a172f031045f97d88/Deardialing/Deardialing/Assets.xcassets/AppIcon.appiconset/Icon-96.png -------------------------------------------------------------------------------- /Deardialing/Deardialing/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Deardialing.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.dialingSharedDefaults 8 | group.dialing.container 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/GroupDatil.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GroupDatil.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/17. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class GroupDatil: UIViewController, UITableViewDataSource, UITableViewDelegate { 12 | var tableView: UITableView! 13 | var items: [[Item]] = [[]] 14 | var titles: [(String, String)] = [] 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | tableView = UITableView(frame: view.bounds, style: .grouped) 19 | tableView.delegate = self 20 | tableView.dataSource = self 21 | tableView.register(cellType: ItemCell.self) 22 | tableView.tableFooterView = UIView() 23 | view.addSubview(tableView) 24 | } 25 | 26 | func numberOfSections(in tableView: UITableView) -> Int { 27 | return items.count 28 | } 29 | 30 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 31 | return items[section].count 32 | } 33 | 34 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 35 | let cell = tableView.dequeueReusableCell(with: ItemCell.self) 36 | cell.textLabel?.text = items[indexPath.section][indexPath.row].title 37 | cell.detailTextLabel?.text = items[indexPath.section][indexPath.row].subtitle 38 | cell.accessoryType = items[indexPath.section][indexPath.row].selectable ? .disclosureIndicator : .none 39 | return cell 40 | } 41 | 42 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 43 | let item = items[indexPath.section][indexPath.row] 44 | if let url = item.uri { 45 | let dest = WebController() 46 | dest.uri = url 47 | navigationController?.pushViewController(dest, animated: true) 48 | } 49 | } 50 | 51 | func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 52 | if titles.count > section { 53 | return titles[section].0 54 | } 55 | return "" 56 | } 57 | 58 | func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String? { 59 | if titles.count > section { 60 | return titles[section].1 61 | } 62 | return "" 63 | } 64 | 65 | override func viewWillLayoutSubviews() { 66 | super.viewWillLayoutSubviews() 67 | tableView.frame = view.bounds 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(APP_DISPLAY_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Item.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Item.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/16. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class Item { 12 | var title: String = "标题" 13 | var subtitle: String = "副标题" 14 | var selectable: Bool = true 15 | var dest: UIViewController? 16 | var uri: String? = nil 17 | 18 | 19 | init(title: String, subtitle: String = "", dest: UIViewController? = nil, selectable: Bool = true, uri: String? = nil) { 20 | self.title = title 21 | self.subtitle = subtitle 22 | self.selectable = selectable 23 | self.dest = dest 24 | self.uri = uri 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/ItemCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomCell.swift 3 | // ListKitDemo 4 | // 5 | // Created by KingCQ on 2016/12/16. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ItemCell: UITableViewCell, Reusable { 12 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 13 | super.init(style: .value1, reuseIdentifier: reuseIdentifier) 14 | } 15 | 16 | required init?(coder aDecoder: NSCoder) { 17 | fatalError("init(coder:) has not been implemented") 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/Reusable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Reusable.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/16. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | protocol Reusable: class { 10 | static var reuseIdentifier: String { get } 11 | } 12 | 13 | extension Reusable { 14 | static var reuseIdentifier: String { 15 | return String(describing: self) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/SettingController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingController.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/25. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SettingController: GroupDatil { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | title = "更多" 16 | items = [ 17 | [ 18 | Item(title: "作者", subtitle: "星辰变"), 19 | Item(title: "github", subtitle: "CNKCQ", uri: "https://github.com/CNKCQ") 20 | ], 21 | [ 22 | Item(title: "关于"), 23 | Item(title: "版本") 24 | ] 25 | ] 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/UITableView+Reusable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UITableView+Reusable.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/16. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension UITableView { 12 | 13 | final func register(cellType: T.Type) 14 | where T: Reusable { 15 | self.register(cellType.self, forCellReuseIdentifier: cellType.reuseIdentifier) 16 | } 17 | 18 | final func dequeueReusableCell(for indexPath: IndexPath, cellType: T.Type = T.self) -> T 19 | where T: Reusable { 20 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else { 21 | fatalError( 22 | "Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self). " 23 | + "Check that the reuseIdentifier is set properly in your XIB/Storyboard " 24 | + "and that you registered the cell beforehand" 25 | ) 26 | } 27 | return cell 28 | } 29 | 30 | final func dequeueReusableCell(with cellType: T.Type = T.self) -> T 31 | where T: Reusable { 32 | guard let cell = self.dequeueReusableCell(withIdentifier: cellType.reuseIdentifier) as? T else { 33 | fatalError( 34 | "Failed to dequeue a cell with identifier \(cellType.reuseIdentifier) matching type \(cellType.self). " 35 | + "Check that the reuseIdentifier is set properly in your XIB/Storyboard " 36 | + "and that you registered the cell beforehand" 37 | ) 38 | } 39 | return cell 40 | } 41 | 42 | final func register(headerFooterViewType: T.Type) 43 | where T: Reusable { 44 | self.register(headerFooterViewType.self, forHeaderFooterViewReuseIdentifier: headerFooterViewType.reuseIdentifier) 45 | } 46 | 47 | final func dequeueReusableHeaderFooterView(_ viewType: T.Type = T.self) -> T? 48 | where T: Reusable { 49 | guard let view = self.dequeueReusableHeaderFooterView(withIdentifier: viewType.reuseIdentifier) as? T? else { 50 | fatalError( 51 | "Failed to dequeue a header/footer with identifier \(viewType.reuseIdentifier) " 52 | + "matching type \(viewType.self). " 53 | + "Check that the reuseIdentifier is set properly in your XIB/Storyboard " 54 | + "and that you registered the header/footer beforehand" 55 | ) 56 | } 57 | return view 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/11/28. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ContactsUI 11 | import Dialkit 12 | 13 | class ViewController: UIViewController { 14 | var tableView: UITableView! 15 | var datas: [Contact] = [] { 16 | didSet { 17 | tableView.reloadData() 18 | } 19 | } 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | title = "" 24 | tableView = UITableView(frame: view.bounds) 25 | tableView.delegate = self 26 | tableView.dataSource = self 27 | tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 28 | tableView.tableFooterView = UIView() 29 | view.addSubview(tableView) 30 | navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add)) 31 | navigationItem.rightBarButtonItem = UIBarButtonItem(title: "更多", style: .done, target: self, action: #selector(set)) 32 | datas = NSKeyedUnarchiver.unarchiveObject(withFile: groupFilePath) as? [Contact] ?? [] 33 | } 34 | 35 | override func viewWillLayoutSubviews() { 36 | super.viewWillLayoutSubviews() 37 | tableView.frame = view.bounds 38 | } 39 | 40 | func set() { 41 | navigationController?.pushViewController(SettingController(), animated: true) 42 | } 43 | 44 | func add() { 45 | let contact = CNContactPickerViewController() 46 | contact.delegate = self 47 | present(contact, animated: true, completion: nil) 48 | } 49 | } 50 | 51 | extension ViewController: CNContactPickerDelegate { 52 | func contactPickerDidCancel(_ picker: CNContactPickerViewController) { 53 | print("cancel") 54 | } 55 | 56 | func contactPicker(_ picker: CNContactPickerViewController, didSelect contacts: [CNContact]) { 57 | datas = contacts.map({Contact(familyName: $0.familyName, givenName: $0.givenName, phoneNumber: $0.phoneNumbers.first?.value.stringValue, imageData: $0.imageData)}) 58 | NSKeyedArchiver.archiveRootObject(datas, toFile: groupFilePath) 59 | print(groupFilePath, "🐱", FileManager.default.isReadableFile(atPath: groupFilePath)) 60 | 61 | } 62 | 63 | func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) { 64 | // print(contactProperty.key, contactProperty.value) 65 | } 66 | } 67 | 68 | extension ViewController: UITableViewDelegate, UITableViewDataSource { 69 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 70 | return datas.count 71 | } 72 | 73 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 74 | let cell = tableView.dequeueReusableCell(withIdentifier: "cell")! 75 | let contact = datas[indexPath.row] 76 | cell.imageView?.image = UIImage(data: contact.imageData)?.image(width: 15, sizeToFit: CGSize(width: 30, height: 30)) 77 | cell.textLabel?.text = "\(contact.familyName) \(contact.phoneNumber)".replacingOccurrences(of: "-", with: "") 78 | return cell 79 | } 80 | } 81 | 82 | -------------------------------------------------------------------------------- /Deardialing/Deardialing/WebController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WebController.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2017/1/2. 6 | // Copyright © 2017年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import WebKit 11 | 12 | class WebController: UIViewController, WKNavigationDelegate { 13 | var webView: WKWebView! 14 | var uri = "" 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | webView = WKWebView(frame: view.bounds) 19 | view.addSubview(webView) 20 | guard let url = URL(string: uri) else { 21 | return 22 | } 23 | webView.navigationDelegate = self 24 | webView.load(URLRequest(url: url)) 25 | } 26 | 27 | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 28 | title = webView.title 29 | } 30 | 31 | override func viewWillLayoutSubviews() { 32 | super.viewWillLayoutSubviews() 33 | webView.frame = view.bounds 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Deardialing/Dialkit/Contact.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Contact.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/11/29. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | 10 | import UIKit 11 | 12 | open class Contact: NSObject, NSCoding { 13 | public var familyName = "" 14 | public var givenName = "" 15 | public var phoneNumber = "" 16 | public var imageData = Data() 17 | 18 | public init(familyName: String, givenName: String, phoneNumber: String?, imageData: Data?) { 19 | self.familyName = familyName 20 | self.givenName = givenName 21 | self.phoneNumber = phoneNumber ?? "" 22 | self.imageData = imageData ?? Data() 23 | } 24 | 25 | required public init?(coder aDecoder: NSCoder) { 26 | familyName = aDecoder.decodeObject(forKey: "familyName") as? String ?? "" 27 | givenName = aDecoder.decodeObject(forKey: "givenName") as? String ?? "" 28 | phoneNumber = aDecoder.decodeObject(forKey: "phoneNumber") as? String ?? "" 29 | imageData = aDecoder.decodeObject(forKey: "imageData") as? Data ?? Data() 30 | } 31 | 32 | public func encode(with aCoder: NSCoder) { 33 | aCoder.encode(familyName, forKey: "familyName") 34 | aCoder.encode(givenName, forKey: "givenName") 35 | aCoder.encode(phoneNumber, forKey: "phoneNumber") 36 | aCoder.encode(imageData, forKey: "imageData") 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Deardialing/Dialkit/Dialkit.h: -------------------------------------------------------------------------------- 1 | // 2 | // Dialkit.h 3 | // Dialkit 4 | // 5 | // Created by KingCQ on 2016/11/29. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for Dialkit. 12 | FOUNDATION_EXPORT double DialkitVersionNumber; 13 | 14 | //! Project version string for Dialkit. 15 | FOUNDATION_EXPORT const unsigned char DialkitVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /Deardialing/Dialkit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Deardialing/Dialkit/UIImage+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImage+Extension.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/12/10. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | extension UIImage { 10 | 11 | /* 缩放 */ 12 | public func resize(size: CGSize) -> UIImage { 13 | UIGraphicsBeginImageContextWithOptions(size, false, 0) 14 | draw(in: CGRect(origin: CGPoint.zero, size: size)) 15 | let image = UIGraphicsGetImageFromCurrentImageContext()! 16 | UIGraphicsEndImageContext() 17 | return image 18 | } 19 | 20 | /* 切图 */ 21 | public func crop(rect: CGRect) -> UIImage { 22 | UIGraphicsBeginImageContextWithOptions(rect.size, false, 0) 23 | draw(at: CGPoint(x: -rect.origin.x, y: -rect.origin.y)) 24 | let image = UIGraphicsGetImageFromCurrentImageContext()! 25 | UIGraphicsEndImageContext() 26 | return image 27 | } 28 | 29 | /* 生成纯色图片, 默认大小1x1, 在UITableViewCell默认左侧图标使用时需要手动设定大小占位 */ 30 | public class func image(with color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage { 31 | UIGraphicsBeginImageContext(size) 32 | color.set() 33 | UIRectFill(CGRect(origin: CGPoint.zero, size: size)) 34 | let image = UIGraphicsGetImageFromCurrentImageContext()! 35 | UIGraphicsEndImageContext() 36 | return image 37 | } 38 | 39 | public func image(width radius: CGFloat, sizeToFit: CGSize) -> UIImage { 40 | let rect = CGRect(origin: CGPoint(x: 0, y: 0), size: sizeToFit) 41 | UIGraphicsBeginImageContextWithOptions(rect.size, false, UIScreen.main.scale) 42 | let path: CGPath = UIBezierPath(roundedRect: rect, byRoundingCorners: UIRectCorner.allCorners, cornerRadii: CGSize(width: radius, height: radius)).cgPath 43 | UIGraphicsGetCurrentContext()?.addPath(path) 44 | UIGraphicsGetCurrentContext()?.clip() 45 | self.draw(in: rect) 46 | UIGraphicsGetCurrentContext()?.drawPath(using: .fillStroke) 47 | let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()! 48 | UIGraphicsEndImageContext() 49 | return image 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Deardialing/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'calling' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | # Pods for calling 9 | 10 | end 11 | 12 | target 'Deardialing' do 13 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 14 | use_frameworks! 15 | 16 | # Pods for Deardialing 17 | 18 | end 19 | 20 | target 'dialing' do 21 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 22 | use_frameworks! 23 | 24 | pod 'FaceAware' 25 | 26 | end 27 | 28 | target 'Dialkit' do 29 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 30 | use_frameworks! 31 | 32 | # Pods for Dialkit 33 | 34 | end 35 | -------------------------------------------------------------------------------- /Deardialing/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FaceAware (1.1.0) 3 | 4 | DEPENDENCIES: 5 | - FaceAware 6 | 7 | SPEC CHECKSUMS: 8 | FaceAware: 878af999db2eb4f2bba5c84e91c77cf953a7bd0d 9 | 10 | PODFILE CHECKSUM: ce5cffe22a1e20f470630b73a71188bb20de972c 11 | 12 | COCOAPODS: 1.2.0.beta.1 13 | -------------------------------------------------------------------------------- /Deardialing/Pods/FaceAware/FaceAware/UIImageView+FaceAware.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIImageView+FacesFill.swift 3 | // FacesFill 4 | // 5 | // Created by Beau Nouvelle on 22/7/16. 6 | // Copyright © 2016 Pear Pi. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ObjectiveC 11 | 12 | @IBDesignable 13 | public extension UIImageView { 14 | 15 | @IBInspectable 16 | public var focusOnFaces: Bool { 17 | set { 18 | let image = self.image 19 | self.image = nil 20 | set(image: image, focusOnFaces: newValue) 21 | } get { 22 | return sublayer() != nil ? true : false 23 | } 24 | } 25 | 26 | public func set(image: UIImage?, focusOnFaces: Bool) { 27 | guard focusOnFaces == true else { 28 | self.image = image 29 | return 30 | } 31 | setImageAndFocusOnFaces(image: image) 32 | } 33 | 34 | private func setImageAndFocusOnFaces(image: UIImage?) { 35 | DispatchQueue.global(qos: .default).async { 36 | guard let image = image else { 37 | return 38 | } 39 | 40 | let cImage = image.ciImage ?? CIImage(cgImage: image.cgImage!) 41 | 42 | let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyLow]) 43 | let features = detector!.features(in: cImage) 44 | 45 | if features.count > 0 { 46 | print("found \(features.count) faces") 47 | let imgSize = CGSize(width: Double(image.cgImage!.width), height: (Double(image.cgImage!.height))) 48 | self.applyFaceDetection(for: features, size: imgSize, cgImage: image.cgImage!) 49 | } else { 50 | print("No faces found") 51 | DispatchQueue.main.async { 52 | self.imageLayer().removeFromSuperlayer() 53 | } 54 | } 55 | DispatchQueue.main.sync { 56 | self.image = image 57 | } 58 | } 59 | } 60 | 61 | private func applyFaceDetection(for features: [AnyObject], size: CGSize, cgImage: CGImage) { 62 | var rect = CGRect.zero 63 | var rightBorder = 0.0 64 | var bottomBorder = 0.0 65 | 66 | for feature in features { 67 | var oneRect = feature.bounds! 68 | oneRect.origin.y = size.height - oneRect.origin.y - oneRect.size.height 69 | rect.origin.x = min(oneRect.origin.x, rect.origin.x) 70 | rect.origin.y = min(oneRect.origin.y, rect.origin.y) 71 | 72 | rightBorder = max(Double(oneRect.origin.x + oneRect.size.width), Double(rightBorder)) 73 | bottomBorder = max(Double(oneRect.origin.y + oneRect.size.height), Double(bottomBorder)) 74 | } 75 | 76 | rect.size.width = CGFloat(rightBorder) - rect.origin.x 77 | rect.size.height = CGFloat(bottomBorder) - rect.origin.y 78 | 79 | var center = CGPoint(x: rect.origin.x + rect.size.width / 2.0, y: rect.origin.y + rect.size.height / 2.0) 80 | var offset = CGPoint.zero 81 | var finalSize = size 82 | 83 | if size.width / size.height > bounds.size.width / bounds.size.height { 84 | finalSize.height = self.bounds.size.height 85 | finalSize.width = size.width/size.height * finalSize.height 86 | center.x = finalSize.width / size.width * center.x 87 | center.y = finalSize.width / size.width * center.y 88 | 89 | offset.x = center.x - self.bounds.size.width * 0.5 90 | if (offset.x < 0) { 91 | offset.x = 0 92 | } else if (offset.x + self.bounds.size.width > finalSize.width) { 93 | offset.x = finalSize.width - self.bounds.size.width 94 | } 95 | offset.x = -offset.x 96 | } else { 97 | finalSize.width = self.bounds.size.width 98 | finalSize.height = size.height / size.width * finalSize.width 99 | center.x = finalSize.width / size.width * center.x 100 | center.y = finalSize.width / size.width * center.y 101 | 102 | offset.y = center.y - self.bounds.size.height * CGFloat(1-0.618) 103 | if offset.y < 0 { 104 | offset.y = 0 105 | } else if offset.y + self.bounds.size.height > finalSize.height { 106 | finalSize.height = self.bounds.size.height 107 | offset.y = finalSize.height 108 | } 109 | offset.y = -offset.y 110 | } 111 | 112 | DispatchQueue.main.sync { 113 | let layer = self.imageLayer() 114 | layer.frame = CGRect(x: offset.x, y: offset.y, width: finalSize.width, height: finalSize.height) 115 | layer.contents = cgImage 116 | } 117 | } 118 | 119 | private func imageLayer() -> CALayer { 120 | if let layer = sublayer() { 121 | return layer 122 | } 123 | 124 | let subLayer = CALayer() 125 | subLayer.name = "AspectFillFaceAware" 126 | subLayer.actions = ["contents":NSNull(), "bounds":NSNull(), "position":NSNull()] 127 | layer.addSublayer(subLayer) 128 | return subLayer 129 | } 130 | 131 | private func sublayer() -> CALayer? { 132 | if let sublayers = layer.sublayers { 133 | for layer in sublayers { 134 | if layer.name == "AspectFillFaceAware" { 135 | return layer 136 | } 137 | } 138 | } 139 | return nil 140 | } 141 | 142 | } 143 | -------------------------------------------------------------------------------- /Deardialing/Pods/FaceAware/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 Beau Nouvelle 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Deardialing/Pods/FaceAware/README.md: -------------------------------------------------------------------------------- 1 | # FaceAware 2 | 3 | 4 | 5 | Sometimes the aspect ratios of images we need to work with don't quite fit within the confines of our UIImageViews. 6 | 7 | In most cases we can use AspectFill to fit the image to the bounds of a UIImageView without stretching or leaving whitespace, however when it comes to photos of people, it's quite often to have the faces cropped out if they're not perfectly centered. 8 | 9 | This is where FaceAware comes in. 10 | It will analyse an image either through `UIImageView`'s `image` property, or one you set using one of the built in functions and focus in on any faces it can find within. 11 | 12 | The most common use for FaceAware is with avatars. 13 | 14 | With FaceAware your users will no longer have to crop and adjust their profile pictures. 15 | 16 | 17 | 18 | Based on these two older projects: 19 | 20 | * [BetterFace-Swift](https://github.com/croath/UIImageView-BetterFace-Swift) 21 | * [FaceAwareFill](https://github.com/Julioacarrettoni/UIImageView_FaceAwareFill) 22 | 23 | Both of which don't seem to be maintained anymore. 24 | 25 | ##Requirements## 26 | * Swift 3.0 27 | * iOS 8.0+ 28 | * Xcode 8 29 | 30 | ##Installation## 31 | ###Manual### 32 | Simply drag `UIImageView+FaceAware.swift` into your project. 33 | 34 | There's one for Swift 3.0 and 2.3 however the example project will only run in Xcode 8. 35 | 36 | ###Cocoapods### 37 | Just add `pod 'FaceAware'` to your pod file. 38 | 39 | ##Useage## 40 | There are a few ways to get your image views focussing in on faces within images. 41 | 42 | ####Interface Builder#### 43 | This is the easiest method and doesn't require writing any code. 44 | The extension makes use of `@IBDesignable` and `@IBInspectable` so you can turn on focusOnFaces from within IB. However you won't actually see the extension working until you run your project. 45 | 46 | 47 | 48 | ####Code#### 49 | You can set `focusOnFaces` to `true`. 50 | 51 | ``` 52 | someImageView.focusOnFaces = true 53 | ``` 54 | Be sure to set this *after* setting your image. If no image is present when this is called, there will be no faces to focus on. 55 | 56 | ------ 57 | 58 | Alternatively you can use: 59 | 60 | ``` 61 | someImageView.set(image: myImage, focusOnFaces: true) 62 | ``` 63 | Which elimates the worry of not having an image previously set. 64 | 65 | ##More help? Questions?## 66 | Reach out to me on Twitter [@beaunouvelle](https://twitter.com/BeauNouvelle) 67 | 68 | ##Future Plans## 69 | - [ ] Add an option to only focus on largest/closest face in photo. 70 | - [ ] Debug mode. Draw rectangles around detected faces. 71 | 72 | ##License## 73 | 74 | The MIT License (MIT) 75 | 76 | Copyright (c) 2016 Beau Nouvelle 77 | 78 | Permission is hereby granted, free of charge, to any person obtaining a copy 79 | of this software and associated documentation files (the "Software"), to deal 80 | in the Software without restriction, including without limitation the rights 81 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 82 | copies of the Software, and to permit persons to whom the Software is 83 | furnished to do so, subject to the following conditions: 84 | 85 | The above copyright notice and this permission notice shall be included in all 86 | copies or substantial portions of the Software. 87 | 88 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 89 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 90 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 91 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 92 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 93 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 94 | SOFTWARE. 95 | -------------------------------------------------------------------------------- /Deardialing/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FaceAware (1.1.0) 3 | 4 | DEPENDENCIES: 5 | - FaceAware 6 | 7 | SPEC CHECKSUMS: 8 | FaceAware: 878af999db2eb4f2bba5c84e91c77cf953a7bd0d 9 | 10 | PODFILE CHECKSUM: ce5cffe22a1e20f470630b73a71188bb20de972c 11 | 12 | COCOAPODS: 1.2.0.beta.1 13 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/FaceAware-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_FaceAware : NSObject 3 | @end 4 | @implementation PodsDummy_FaceAware 5 | @end 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/FaceAware-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/FaceAware-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double FaceAwareVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char FaceAwareVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/FaceAware.modulemap: -------------------------------------------------------------------------------- 1 | framework module FaceAware { 2 | umbrella header "FaceAware-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/FaceAware.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FaceAware 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 5 | PODS_BUILD_DIR = $BUILD_DIR 6 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/FaceAware 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/FaceAware/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## FaceAware 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 Beau Nouvelle 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 Beau Nouvelle 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | FaceAware 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Deardialing : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Deardialing 5 | @end 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1"" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | 91 | if [[ "$CONFIGURATION" == "Debug" ]]; then 92 | install_framework "$BUILT_PRODUCTS_DIR/FaceAware/FaceAware.framework" 93 | fi 94 | if [[ "$CONFIGURATION" == "Release" ]]; then 95 | install_framework "$BUILT_PRODUCTS_DIR/FaceAware/FaceAware.framework" 96 | fi 97 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 98 | wait 99 | fi 100 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 45 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 46 | ;; 47 | *.xib) 48 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 49 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | fi 100 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DeardialingVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DeardialingVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FaceAware" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FaceAware/FaceAware.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "FaceAware" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Deardialing { 2 | umbrella header "Pods-Deardialing-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Deardialing/Pods-Deardialing.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FaceAware" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FaceAware/FaceAware.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "FaceAware" 7 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 8 | PODS_BUILD_DIR = $BUILD_DIR 9 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Dialkit : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Dialkit 5 | @end 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 45 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 46 | ;; 47 | *.xib) 48 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 49 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | fi 100 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DialkitVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DialkitVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT}/Pods 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Dialkit { 2 | umbrella header "Pods-Dialkit-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-Dialkit/Pods-Dialkit.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT}/Pods 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_calling : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_calling 5 | @end 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 45 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 46 | ;; 47 | *.xib) 48 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 49 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | fi 100 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_callingVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_callingVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT}/Pods 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_calling { 2 | umbrella header "Pods-calling-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-calling/Pods-calling.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_ROOT = ${SRCROOT}/Pods 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## FaceAware 5 | 6 | The MIT License (MIT) 7 | 8 | Copyright (c) 2016 Beau Nouvelle 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | Generated by CocoaPods - https://cocoapods.org 29 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | The MIT License (MIT) 18 | 19 | Copyright (c) 2016 Beau Nouvelle 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | FaceAware 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | Generated by CocoaPods - https://cocoapods.org 49 | Title 50 | 51 | Type 52 | PSGroupSpecifier 53 | 54 | 55 | StringsTable 56 | Acknowledgements 57 | Title 58 | Acknowledgements 59 | 60 | 61 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_dialing : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_dialing 5 | @end 6 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | *) 25 | TARGET_DEVICE_ARGS="--target-device mac" 26 | ;; 27 | esac 28 | 29 | install_resource() 30 | { 31 | if [[ "$1" = /* ]] ; then 32 | RESOURCE_PATH="$1" 33 | else 34 | RESOURCE_PATH="${PODS_ROOT}/$1" 35 | fi 36 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 37 | cat << EOM 38 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 39 | EOM 40 | exit 1 41 | fi 42 | case $RESOURCE_PATH in 43 | *.storyboard) 44 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 45 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 46 | ;; 47 | *.xib) 48 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 49 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 50 | ;; 51 | *.framework) 52 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 54 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 55 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | ;; 57 | *.xcdatamodel) 58 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 59 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 60 | ;; 61 | *.xcdatamodeld) 62 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 63 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 64 | ;; 65 | *.xcmappingmodel) 66 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 67 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 68 | ;; 69 | *.xcassets) 70 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 71 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 72 | ;; 73 | *) 74 | echo "$RESOURCE_PATH" 75 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 76 | ;; 77 | esac 78 | } 79 | 80 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 83 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | fi 86 | rm -f "$RESOURCES_TO_COPY" 87 | 88 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 89 | then 90 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 91 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 92 | while read line; do 93 | if [[ $line != "${PODS_ROOT}*" ]]; then 94 | XCASSET_FILES+=("$line") 95 | fi 96 | done <<<"$OTHER_XCASSETS" 97 | 98 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | fi 100 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_dialingVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_dialingVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FaceAware" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FaceAware/FaceAware.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "FaceAware" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_dialing { 2 | umbrella header "Pods-dialing-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Deardialing/Pods/Target Support Files/Pods-dialing/Pods-dialing.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/FaceAware" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 4 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/FaceAware/FaceAware.framework/Headers" 5 | OTHER_LDFLAGS = $(inherited) -framework "FaceAware" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Deardialing/Utils/Utils.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Utils.swift 3 | // Deardialing 4 | // 5 | // Created by KingCQ on 2016/11/28. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | func findIndex(array: [T], valueToFind: T) -> Int? { 12 | for (idx, value) in array.enumerated() { 13 | if value == valueToFind { 14 | return idx 15 | } 16 | } 17 | return nil 18 | } 19 | 20 | var documentDirectory: String { 21 | let manager = FileManager.default 22 | let url = manager.urls(for: .documentDirectory, in: .userDomainMask).first! 23 | return url.appendingPathComponent("contacts").absoluteString 24 | } 25 | 26 | var filePath: String { 27 | return NSHomeDirectory().appending("/Documents/contacts") 28 | } 29 | 30 | var groupFilePath: String { 31 | return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.dialing.container")?.appendingPathComponent("contacts").absoluteString.replacingOccurrences(of: "file://", with: "") ?? "" 32 | } 33 | 34 | var documentFile: String { 35 | let manager = FileManager.default 36 | let url = manager.urls(for: .documentDirectory, in: .userDomainMask).first! 37 | return url.appendingPathComponent("contacts").absoluteString 38 | } 39 | -------------------------------------------------------------------------------- /Deardialing/calling/CallDirectoryHandler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CallDirectoryHandler.swift 3 | // calling 4 | // 5 | // Created by KingCQ on 2016/11/28. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CallKit 11 | 12 | @available(iOSApplicationExtension 10.0, *) 13 | class CallDirectoryHandler: CXCallDirectoryProvider { 14 | 15 | override func beginRequest(with context: CXCallDirectoryExtensionContext) { 16 | context.delegate = self 17 | 18 | do { 19 | try addBlockingPhoneNumbers(to: context) 20 | } catch { 21 | NSLog("Unable to add blocking phone numbers") 22 | let error = NSError(domain: "CallDirectoryHandler", code: 1, userInfo: nil) 23 | context.cancelRequest(withError: error) 24 | return 25 | } 26 | 27 | do { 28 | try addIdentificationPhoneNumbers(to: context) 29 | } catch { 30 | NSLog("Unable to add identification phone numbers") 31 | let error = NSError(domain: "CallDirectoryHandler", code: 2, userInfo: nil) 32 | context.cancelRequest(withError: error) 33 | return 34 | } 35 | 36 | context.completeRequest() 37 | } 38 | 39 | private func addBlockingPhoneNumbers(to context: CXCallDirectoryExtensionContext) throws { 40 | // Retrieve phone numbers to block from data store. For optimal performance and memory usage when there are many phone numbers, 41 | // consider only loading a subset of numbers at a given time and using autorelease pool(s) to release objects allocated during each batch of numbers which are loaded. 42 | // 43 | // Numbers must be provided in numerically ascending order. 44 | let phoneNumbers: [CXCallDirectoryPhoneNumber] = [ 14085555555, 18005555555 ] 45 | 46 | for phoneNumber in phoneNumbers { 47 | context.addBlockingEntry(withNextSequentialPhoneNumber: phoneNumber) 48 | } 49 | } 50 | 51 | private func addIdentificationPhoneNumbers(to context: CXCallDirectoryExtensionContext) throws { 52 | // Retrieve phone numbers to identify and their identification labels from data store. For optimal performance and memory usage when there are many phone numbers, 53 | // consider only loading a subset of numbers at a given time and using autorelease pool(s) to release objects allocated during each batch of numbers which are loaded. 54 | // 55 | // Numbers must be provided in numerically ascending order. 56 | let phoneNumbers: [CXCallDirectoryPhoneNumber] = [ 18775555555, 18885555555 ] 57 | let labels = [ "Telemarketer", "Local business" ] 58 | 59 | for (phoneNumber, label) in zip(phoneNumbers, labels) { 60 | context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label) 61 | } 62 | } 63 | 64 | } 65 | 66 | @available(iOSApplicationExtension 10.0, *) 67 | extension CallDirectoryHandler: CXCallDirectoryExtensionContextDelegate { 68 | 69 | @available(iOSApplicationExtension 10.0, *) 70 | func requestFailed(for extensionContext: CXCallDirectoryExtensionContext, withError error: Error) { 71 | // An error occurred while adding blocking or identification entries, check the NSError for details. 72 | // For Call Directory error codes, see the CXErrorCodeCallDirectoryManagerError enum in . 73 | // 74 | // This may be used to store the error details in a location accessible by the extension's containing app, so that the 75 | // app may be notified about errors which occured while loading data even if the request to load data was initiated by 76 | // the user in Settings instead of via the app itself. 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /Deardialing/calling/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | calling 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | NSExtension 24 | 25 | NSExtensionPointIdentifier 26 | com.apple.callkit.call-directory 27 | NSExtensionPrincipalClass 28 | $(PRODUCT_MODULE_NAME).CallDirectoryHandler 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Deardialing/calling/calling.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.dialingSharedDefaults 8 | group.dialing.container 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Deardialing/dialing/Base.lproj/MainInterface.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Deardialing/dialing/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | zh_CN 7 | CFBundleDisplayName 8 | $(Today_DISPLAY_NAME) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(Today_DISPLAY_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | NSExtension 24 | 25 | NSExtensionMainStoryboard 26 | MainInterface 27 | NSExtensionPointIdentifier 28 | com.apple.widget-extension 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /Deardialing/dialing/TodayViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TodayViewController.swift 3 | // dialing 4 | // 5 | // Created by KingCQ on 2016/11/28. 6 | // Copyright © 2016年 KingCQ. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import NotificationCenter 11 | import Dialkit 12 | import FaceAware 13 | 14 | class TodayViewController: UIViewController, NCWidgetProviding { 15 | var contacts: [Contact] = [] 16 | 17 | override func viewWillAppear(_ animated: Bool) { 18 | super.viewWillAppear(animated) 19 | setup() 20 | } 21 | 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | setup() 25 | } 26 | 27 | func setup() { 28 | contacts = (NSKeyedUnarchiver.unarchiveObject(withFile: groupFilePath) as? [Contact]) ?? [] 29 | for (idx, contact) in contacts.enumerated() { 30 | let button = UIButton(frame: CGRect(x: idx * (60 + 15) + 15, y: 5, width: 60, height: 60)) 31 | button.layer.cornerRadius = 30 32 | let image = UIImage(data: contact.imageData) 33 | button.setImage(image, for: .normal) 34 | button.clipsToBounds = true 35 | button.backgroundColor = UIColor.brown 36 | button.tag = idx 37 | button.addTarget(self, action: #selector(tap(sender:)), for: .touchUpInside) 38 | let nameLabel = UILabel(frame: CGRect(x: button.frame.minX, y: button.frame.maxY + 5, width: button.frame.width, height: 15)) 39 | nameLabel.textAlignment = .center 40 | nameLabel.font = UIFont.systemFont(ofSize: 14) 41 | nameLabel.textColor = UIColor.darkText 42 | nameLabel.text = contact.familyName 43 | view.addSubview(button) 44 | view.addSubview(nameLabel) 45 | } 46 | } 47 | 48 | func tap(sender: UIButton) { 49 | /// See: http://www.cocoachina.com/bbs/read.php?tid=177141 50 | self.extensionContext?.open(URL(string: "tel://\(contacts[sender.tag].phoneNumber)".replacingOccurrences(of: " ", with: ""))!, completionHandler: nil) 51 | } 52 | 53 | override func didReceiveMemoryWarning() { 54 | super.didReceiveMemoryWarning() 55 | // Dispose of any resources that can be recreated. 56 | } 57 | 58 | func widgetPerformUpdate(completionHandler: (@escaping (NCUpdateResult) -> Void)) { 59 | // Perform any setup necessary in order to update the view. 60 | // If an error is encountered, use NCUpdateResult.Failed 61 | // If there's no update required, use NCUpdateResult.NoData 62 | // If there's an update, use NCUpdateResult.NewData 63 | contacts = NSKeyedUnarchiver.unarchiveObject(withFile: filePath) as? [Contact] ?? [] 64 | completionHandler(NCUpdateResult.newData) 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /Deardialing/dialing/dialing.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | group.dialingSharedDefaults 8 | group.dialing.container 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "{}" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright {yyyy} {name of copyright owner} 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Deardialing for iOS 2 | 3 | [Deardialing](https://github.com/CNKCQ/Deardialing) for iOS is a app designed by [CNKCQ](https://github.com/CNKCQ/) and written in Swift 3. 4 | 5 | ![Screenshots of dail for iOS](https://cloud.githubusercontent.com/assets/8440220/21587294/7f140aa2-d115-11e6-9979-169121ccd7cb.jpg) 6 | 7 | Deardialing is a sample iOS app created with iOS. 8 | 9 | 10 | ## Getting Started 11 | 12 | To get started and run the app, you need to follow these simple steps: 13 | 14 | 1. OS X 10.11 or newer, Xcode 8. 15 | 16 | 2. Open the Deardialing.xcworkspace in Xcode. 17 | 18 | 3. You're all set! Run Deardialing on your iPhone or the iOS Simulator. 19 | 20 | ## Compatibility 21 | 22 | This project is written in Swift 3.0 so Deardialing requires Xcode 8 to build and run. 23 | 24 | Deardialing for iOS is compatible with iOS 9+. 25 | 26 | ## Authors 27 | 28 | * [CNKCQ](https://github.com/CNKCQ) 29 | 30 | ## License 31 | 32 | Copyright 2016 CNKCQ. 33 | 34 | Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 35 | --------------------------------------------------------------------------------