├── .gitignore ├── LICENSE ├── Phimpme.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── Phimpme.xcworkspace └── contents.xcworkspacedata ├── Phimpme ├── Assets │ └── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x-1.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x-1.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x-1.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ └── ItunesArtwork@2x.png │ │ ├── AppThemeColor.colorset │ │ └── Contents.json │ │ ├── Arrow-back.imageset │ │ ├── Arrow-back.pdf │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── account-fill.imageset │ │ ├── Contents.json │ │ └── account-fill.pdf │ │ ├── accounts.imageset │ │ ├── Contents.json │ │ └── accounts.pdf │ │ ├── albums.imageset │ │ ├── Contents.json │ │ └── albums.pdf │ │ ├── box-icon.imageset │ │ ├── Contents.json │ │ └── box-icon.pdf │ │ ├── camera-fill.imageset │ │ ├── Contents.json │ │ └── camera-fill.pdf │ │ ├── camera.imageset │ │ ├── Contents.json │ │ └── camera.pdf │ │ ├── check-all.imageset │ │ ├── Contents.json │ │ └── check-all.png │ │ ├── dropbox-icon.imageset │ │ ├── Contents.json │ │ └── dropbox-icon.pdf │ │ ├── facebook-circled-icon.imageset │ │ ├── Contents.json │ │ └── facebook-circled-icon.pdf │ │ ├── flickr-filled-icon.imageset │ │ ├── Contents.json │ │ └── flickr-filled-icon.pdf │ │ ├── gallery-fill.imageset │ │ ├── Contents.json │ │ └── gallery-fill.pdf │ │ ├── gallery.imageset │ │ ├── Contents.json │ │ └── gallery.pdf │ │ ├── hidden-folder-icon.imageset │ │ ├── Contents.json │ │ ├── hidden-folder-icon.png │ │ ├── hidden-folder-icon@2x.png │ │ └── hidden-folder-icon@3x.png │ │ ├── image-preview.imageset │ │ ├── Contents.json │ │ └── image-preview.pdf │ │ ├── info-icon.imageset │ │ ├── Contents.json │ │ ├── info-icon.png │ │ ├── info-icon@2x.png │ │ └── info-icon@3x.png │ │ ├── instagram-icon.imageset │ │ ├── Contents.json │ │ └── instagram-icon.pdf │ │ ├── local-folder-icon.imageset │ │ ├── Contents.json │ │ ├── local-folder-icon.png │ │ ├── local-folder-icon@2x.png │ │ └── local-folder-icon@3x.png │ │ ├── menu.imageset │ │ ├── Contents.json │ │ └── menu.pdf │ │ ├── more.imageset │ │ ├── Contents.json │ │ └── more.pdf │ │ ├── nextcloud-icon.imageset │ │ ├── Contents.json │ │ └── nextcloud-icon.pdf │ │ ├── owncloud-icon.imageset │ │ ├── Contents.json │ │ └── owncloud-icon.pdf │ │ ├── phimpme-logo.imageset │ │ ├── Contents.json │ │ └── phimpme-logo.png │ │ ├── phimpme_logo_splash.imageset │ │ ├── Contents.json │ │ └── phimpme_logo_splash.pdf │ │ ├── pinterest-icon.imageset │ │ ├── Contents.json │ │ └── pinterest-icon.pdf │ │ ├── rate-us-icon.imageset │ │ ├── Contents.json │ │ ├── rate-us-icon.png │ │ ├── rate-us-icon@2x.png │ │ └── rate-us-icon@3x.png │ │ ├── settings-icon.imageset │ │ ├── Contents.json │ │ ├── settings-icon.png │ │ ├── settings-icon@2x.png │ │ └── settings-icon@3x.png │ │ ├── share-icon.imageset │ │ ├── Contents.json │ │ ├── share-icon.png │ │ ├── share-icon@2x.png │ │ └── share-icon@3x.png │ │ ├── total-photos.imageset │ │ ├── Contents.json │ │ └── total-photos.pdf │ │ ├── tumblr-icon.imageset │ │ ├── Contents.json │ │ └── tumblr-icon.pdf │ │ ├── twitter-icon.imageset │ │ ├── Contents.json │ │ └── twitter-icon.pdf │ │ └── upload-progress-icon.imageset │ │ ├── Contents.json │ │ ├── upload-progress-icon.png │ │ ├── upload-progress-icon@2x.png │ │ └── upload-progress-icon@3x.png ├── Controllers │ ├── AccountsTableViewController.swift │ ├── CameraViewController.swift │ ├── GalleryViewController.swift │ ├── MainTabBarViewController.swift │ ├── MenuViewController.swift │ └── SettingsViewController.swift ├── Helpers │ ├── ControllerConstants.swift │ ├── Extensions.swift │ └── Toast.swift ├── Services │ └── CameraController.swift ├── Storyboards │ └── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard └── Supporting Files │ ├── AppDelegate.swift │ └── Info.plist ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── NMAnimatedTabBarItem │ ├── Classes │ │ ├── NMAnimatedTabBarItem.swift │ │ ├── NMAnimationtype.swift │ │ └── NMRotationDirection.swift │ ├── LICENSE │ └── README.md ├── Pods.xcodeproj │ └── project.pbxproj └── Target Support Files │ ├── NMAnimatedTabBarItem │ ├── Info.plist │ ├── NMAnimatedTabBarItem-dummy.m │ ├── NMAnimatedTabBarItem-prefix.pch │ ├── NMAnimatedTabBarItem-umbrella.h │ ├── NMAnimatedTabBarItem.modulemap │ └── NMAnimatedTabBarItem.xcconfig │ └── Pods-Phimpme │ ├── Info.plist │ ├── Pods-Phimpme-acknowledgements.markdown │ ├── Pods-Phimpme-acknowledgements.plist │ ├── Pods-Phimpme-dummy.m │ ├── Pods-Phimpme-frameworks.sh │ ├── Pods-Phimpme-resources.sh │ ├── Pods-Phimpme-umbrella.h │ ├── Pods-Phimpme.debug.xcconfig │ ├── Pods-Phimpme.modulemap │ └── Pods-Phimpme.release.xcconfig ├── README.md └── docs ├── _static ├── AccountsScreen.png ├── AlertScreen.png ├── CameraScreen.png ├── EditingScreen.png ├── GalleryScreen.png ├── MenuScreen.png ├── SettingsScreen.png ├── ShareScreen.png ├── SplashScreen.png ├── WriteScreen.png ├── phimpme-ios.sketch └── phimpme-logo.png ├── commitStyle.md ├── issue_template.md └── pull_request_template.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 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | .build/ 41 | 42 | # CocoaPods 43 | # 44 | # We recommend against adding the Pods directory to your .gitignore. However 45 | # you should judge for yourself, the pros and cons are mentioned at: 46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 47 | # 48 | # Pods/ 49 | 50 | # Carthage 51 | # 52 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 53 | # Carthage/Checkouts 54 | 55 | Carthage/Build 56 | 57 | # fastlane 58 | # 59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 60 | # screenshots whenever they are needed. 61 | # For more information about the recommended setup visit: 62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 63 | 64 | fastlane/report.xml 65 | fastlane/Preview.html 66 | fastlane/screenshots 67 | fastlane/test_output 68 | 69 | # Ignore MacOS DS_Store files 70 | 71 | *.DS_Store 72 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Jogendra Singh 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 | -------------------------------------------------------------------------------- /Phimpme.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 400167D32061A325003EBAE4 /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400167D22061A324003EBAE4 /* MenuViewController.swift */; }; 11 | 400167D52063AF82003EBAE4 /* MainTabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 400167D42063AF82003EBAE4 /* MainTabBarViewController.swift */; }; 12 | 40688BF42067F1D1005428C2 /* ControllerConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40688BF32067F1D1005428C2 /* ControllerConstants.swift */; }; 13 | 406A8ACD206FCFBE0094BA9A /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406A8ACC206FCFBE0094BA9A /* SettingsViewController.swift */; }; 14 | 406A8ACF2070BA2D0094BA9A /* Toast.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406A8ACE2070BA2D0094BA9A /* Toast.swift */; }; 15 | 406A8AD12070D7FA0094BA9A /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406A8AD02070D7FA0094BA9A /* Extensions.swift */; }; 16 | 406A8AD32070DFE40094BA9A /* CameraController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 406A8AD22070DFE40094BA9A /* CameraController.swift */; }; 17 | 408F1A0720596AC500BDC313 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408F1A0620596AC500BDC313 /* AppDelegate.swift */; }; 18 | 408F1A0920596AC500BDC313 /* GalleryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 408F1A0820596AC500BDC313 /* GalleryViewController.swift */; }; 19 | 408F1A0C20596AC500BDC313 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 408F1A0A20596AC500BDC313 /* Main.storyboard */; }; 20 | 408F1A0E20596AC500BDC313 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 408F1A0D20596AC500BDC313 /* Assets.xcassets */; }; 21 | 408F1A1120596AC500BDC313 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 408F1A0F20596AC500BDC313 /* LaunchScreen.storyboard */; }; 22 | 40F899B72060F83700471ADF /* AccountsTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F899B62060F83700471ADF /* AccountsTableViewController.swift */; }; 23 | 40F899B9206137B600471ADF /* CameraViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F899B8206137B600471ADF /* CameraViewController.swift */; }; 24 | 781992384A2F3D6CA211A031 /* Pods_Phimpme.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2CB302E579EA703C318C373 /* Pods_Phimpme.framework */; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXFileReference section */ 28 | 400167D22061A324003EBAE4 /* MenuViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuViewController.swift; sourceTree = ""; }; 29 | 400167D42063AF82003EBAE4 /* MainTabBarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabBarViewController.swift; sourceTree = ""; }; 30 | 40688BF32067F1D1005428C2 /* ControllerConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ControllerConstants.swift; sourceTree = ""; }; 31 | 406A8ACC206FCFBE0094BA9A /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = ""; }; 32 | 406A8ACE2070BA2D0094BA9A /* Toast.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Toast.swift; sourceTree = ""; }; 33 | 406A8AD02070D7FA0094BA9A /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; }; 34 | 406A8AD22070DFE40094BA9A /* CameraController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraController.swift; sourceTree = ""; }; 35 | 408F1A0320596AC500BDC313 /* Phimpme.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Phimpme.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 408F1A0620596AC500BDC313 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | 408F1A0820596AC500BDC313 /* GalleryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryViewController.swift; sourceTree = ""; }; 38 | 408F1A0B20596AC500BDC313 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | 408F1A0D20596AC500BDC313 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 40 | 408F1A1020596AC500BDC313 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 41 | 408F1A1220596AC500BDC313 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | 40F899B62060F83700471ADF /* AccountsTableViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsTableViewController.swift; sourceTree = ""; }; 43 | 40F899B8206137B600471ADF /* CameraViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CameraViewController.swift; sourceTree = ""; }; 44 | 991E11AE5F3F3F3A820B0968 /* Pods-Phimpme.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Phimpme.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme.debug.xcconfig"; sourceTree = ""; }; 45 | F2CB302E579EA703C318C373 /* Pods_Phimpme.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Phimpme.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | FE33A7B2AAB0D992BB6E0FB7 /* Pods-Phimpme.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Phimpme.release.xcconfig"; path = "Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme.release.xcconfig"; sourceTree = ""; }; 47 | /* End PBXFileReference section */ 48 | 49 | /* Begin PBXFrameworksBuildPhase section */ 50 | 408F1A0020596AC400BDC313 /* Frameworks */ = { 51 | isa = PBXFrameworksBuildPhase; 52 | buildActionMask = 2147483647; 53 | files = ( 54 | 781992384A2F3D6CA211A031 /* Pods_Phimpme.framework in Frameworks */, 55 | ); 56 | runOnlyForDeploymentPostprocessing = 0; 57 | }; 58 | /* End PBXFrameworksBuildPhase section */ 59 | 60 | /* Begin PBXGroup section */ 61 | 232B706441CDC18409E4C7AB /* Frameworks */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | F2CB302E579EA703C318C373 /* Pods_Phimpme.framework */, 65 | ); 66 | name = Frameworks; 67 | sourceTree = ""; 68 | }; 69 | 40688BF52067F365005428C2 /* Helpers */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 40688BF32067F1D1005428C2 /* ControllerConstants.swift */, 73 | 406A8ACE2070BA2D0094BA9A /* Toast.swift */, 74 | 406A8AD02070D7FA0094BA9A /* Extensions.swift */, 75 | ); 76 | path = Helpers; 77 | sourceTree = ""; 78 | }; 79 | 406A8AD42070E09A0094BA9A /* Services */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 406A8AD22070DFE40094BA9A /* CameraController.swift */, 83 | ); 84 | path = Services; 85 | sourceTree = ""; 86 | }; 87 | 4070CE422067EC950067E62A /* Assets */ = { 88 | isa = PBXGroup; 89 | children = ( 90 | 408F1A0D20596AC500BDC313 /* Assets.xcassets */, 91 | ); 92 | path = Assets; 93 | sourceTree = ""; 94 | }; 95 | 4070CE432067ECF50067E62A /* Supporting Files */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 408F1A0620596AC500BDC313 /* AppDelegate.swift */, 99 | 408F1A1220596AC500BDC313 /* Info.plist */, 100 | ); 101 | path = "Supporting Files"; 102 | sourceTree = ""; 103 | }; 104 | 4086D8BA20619E0300CE2DE4 /* Controllers */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 408F1A0820596AC500BDC313 /* GalleryViewController.swift */, 108 | 40F899B62060F83700471ADF /* AccountsTableViewController.swift */, 109 | 40F899B8206137B600471ADF /* CameraViewController.swift */, 110 | 400167D22061A324003EBAE4 /* MenuViewController.swift */, 111 | 400167D42063AF82003EBAE4 /* MainTabBarViewController.swift */, 112 | 406A8ACC206FCFBE0094BA9A /* SettingsViewController.swift */, 113 | ); 114 | path = Controllers; 115 | sourceTree = ""; 116 | }; 117 | 4086D8BB20619E2100CE2DE4 /* Storyboards */ = { 118 | isa = PBXGroup; 119 | children = ( 120 | 408F1A0A20596AC500BDC313 /* Main.storyboard */, 121 | 408F1A0F20596AC500BDC313 /* LaunchScreen.storyboard */, 122 | ); 123 | path = Storyboards; 124 | sourceTree = ""; 125 | }; 126 | 408F19FA20596AC400BDC313 = { 127 | isa = PBXGroup; 128 | children = ( 129 | 408F1A0520596AC500BDC313 /* Phimpme */, 130 | 408F1A0420596AC500BDC313 /* Products */, 131 | D232154F27C9B625D977C578 /* Pods */, 132 | 232B706441CDC18409E4C7AB /* Frameworks */, 133 | ); 134 | sourceTree = ""; 135 | }; 136 | 408F1A0420596AC500BDC313 /* Products */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 408F1A0320596AC500BDC313 /* Phimpme.app */, 140 | ); 141 | name = Products; 142 | sourceTree = ""; 143 | }; 144 | 408F1A0520596AC500BDC313 /* Phimpme */ = { 145 | isa = PBXGroup; 146 | children = ( 147 | 4086D8BA20619E0300CE2DE4 /* Controllers */, 148 | 4086D8BB20619E2100CE2DE4 /* Storyboards */, 149 | 4070CE422067EC950067E62A /* Assets */, 150 | 4070CE432067ECF50067E62A /* Supporting Files */, 151 | 40688BF52067F365005428C2 /* Helpers */, 152 | 406A8AD42070E09A0094BA9A /* Services */, 153 | ); 154 | path = Phimpme; 155 | sourceTree = ""; 156 | }; 157 | D232154F27C9B625D977C578 /* Pods */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 991E11AE5F3F3F3A820B0968 /* Pods-Phimpme.debug.xcconfig */, 161 | FE33A7B2AAB0D992BB6E0FB7 /* Pods-Phimpme.release.xcconfig */, 162 | ); 163 | name = Pods; 164 | sourceTree = ""; 165 | }; 166 | /* End PBXGroup section */ 167 | 168 | /* Begin PBXNativeTarget section */ 169 | 408F1A0220596AC400BDC313 /* Phimpme */ = { 170 | isa = PBXNativeTarget; 171 | buildConfigurationList = 408F1A1520596AC500BDC313 /* Build configuration list for PBXNativeTarget "Phimpme" */; 172 | buildPhases = ( 173 | 222E20F6A37BB972341D77F5 /* [CP] Check Pods Manifest.lock */, 174 | 408F19FF20596AC400BDC313 /* Sources */, 175 | 408F1A0020596AC400BDC313 /* Frameworks */, 176 | 408F1A0120596AC400BDC313 /* Resources */, 177 | B03B9988338769AA6EFEF639 /* [CP] Embed Pods Frameworks */, 178 | 52E946A37C5FD6B9513182FC /* [CP] Copy Pods Resources */, 179 | ); 180 | buildRules = ( 181 | ); 182 | dependencies = ( 183 | ); 184 | name = Phimpme; 185 | productName = "Phimpme-iOS"; 186 | productReference = 408F1A0320596AC500BDC313 /* Phimpme.app */; 187 | productType = "com.apple.product-type.application"; 188 | }; 189 | /* End PBXNativeTarget section */ 190 | 191 | /* Begin PBXProject section */ 192 | 408F19FB20596AC400BDC313 /* Project object */ = { 193 | isa = PBXProject; 194 | attributes = { 195 | LastSwiftUpdateCheck = 0920; 196 | LastUpgradeCheck = 0920; 197 | ORGANIZATIONNAME = "Jogendra Singh"; 198 | TargetAttributes = { 199 | 408F1A0220596AC400BDC313 = { 200 | CreatedOnToolsVersion = 9.2; 201 | ProvisioningStyle = Automatic; 202 | }; 203 | }; 204 | }; 205 | buildConfigurationList = 408F19FE20596AC400BDC313 /* Build configuration list for PBXProject "Phimpme" */; 206 | compatibilityVersion = "Xcode 8.0"; 207 | developmentRegion = en; 208 | hasScannedForEncodings = 0; 209 | knownRegions = ( 210 | en, 211 | Base, 212 | ); 213 | mainGroup = 408F19FA20596AC400BDC313; 214 | productRefGroup = 408F1A0420596AC500BDC313 /* Products */; 215 | projectDirPath = ""; 216 | projectRoot = ""; 217 | targets = ( 218 | 408F1A0220596AC400BDC313 /* Phimpme */, 219 | ); 220 | }; 221 | /* End PBXProject section */ 222 | 223 | /* Begin PBXResourcesBuildPhase section */ 224 | 408F1A0120596AC400BDC313 /* Resources */ = { 225 | isa = PBXResourcesBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | 408F1A1120596AC500BDC313 /* LaunchScreen.storyboard in Resources */, 229 | 408F1A0E20596AC500BDC313 /* Assets.xcassets in Resources */, 230 | 408F1A0C20596AC500BDC313 /* Main.storyboard in Resources */, 231 | ); 232 | runOnlyForDeploymentPostprocessing = 0; 233 | }; 234 | /* End PBXResourcesBuildPhase section */ 235 | 236 | /* Begin PBXShellScriptBuildPhase section */ 237 | 222E20F6A37BB972341D77F5 /* [CP] Check Pods Manifest.lock */ = { 238 | isa = PBXShellScriptBuildPhase; 239 | buildActionMask = 2147483647; 240 | files = ( 241 | ); 242 | inputPaths = ( 243 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 244 | "${PODS_ROOT}/Manifest.lock", 245 | ); 246 | name = "[CP] Check Pods Manifest.lock"; 247 | outputPaths = ( 248 | "$(DERIVED_FILE_DIR)/Pods-Phimpme-checkManifestLockResult.txt", 249 | ); 250 | runOnlyForDeploymentPostprocessing = 0; 251 | shellPath = /bin/sh; 252 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/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# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 253 | showEnvVarsInLog = 0; 254 | }; 255 | 52E946A37C5FD6B9513182FC /* [CP] Copy Pods Resources */ = { 256 | isa = PBXShellScriptBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | ); 260 | inputPaths = ( 261 | ); 262 | name = "[CP] Copy Pods Resources"; 263 | outputPaths = ( 264 | ); 265 | runOnlyForDeploymentPostprocessing = 0; 266 | shellPath = /bin/sh; 267 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-resources.sh\"\n"; 268 | showEnvVarsInLog = 0; 269 | }; 270 | B03B9988338769AA6EFEF639 /* [CP] Embed Pods Frameworks */ = { 271 | isa = PBXShellScriptBuildPhase; 272 | buildActionMask = 2147483647; 273 | files = ( 274 | ); 275 | inputPaths = ( 276 | "${SRCROOT}/Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-frameworks.sh", 277 | "${BUILT_PRODUCTS_DIR}/NMAnimatedTabBarItem/NMAnimatedTabBarItem.framework", 278 | ); 279 | name = "[CP] Embed Pods Frameworks"; 280 | outputPaths = ( 281 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/NMAnimatedTabBarItem.framework", 282 | ); 283 | runOnlyForDeploymentPostprocessing = 0; 284 | shellPath = /bin/sh; 285 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-frameworks.sh\"\n"; 286 | showEnvVarsInLog = 0; 287 | }; 288 | /* End PBXShellScriptBuildPhase section */ 289 | 290 | /* Begin PBXSourcesBuildPhase section */ 291 | 408F19FF20596AC400BDC313 /* Sources */ = { 292 | isa = PBXSourcesBuildPhase; 293 | buildActionMask = 2147483647; 294 | files = ( 295 | 408F1A0920596AC500BDC313 /* GalleryViewController.swift in Sources */, 296 | 400167D32061A325003EBAE4 /* MenuViewController.swift in Sources */, 297 | 40F899B9206137B600471ADF /* CameraViewController.swift in Sources */, 298 | 400167D52063AF82003EBAE4 /* MainTabBarViewController.swift in Sources */, 299 | 40688BF42067F1D1005428C2 /* ControllerConstants.swift in Sources */, 300 | 406A8AD12070D7FA0094BA9A /* Extensions.swift in Sources */, 301 | 406A8AD32070DFE40094BA9A /* CameraController.swift in Sources */, 302 | 40F899B72060F83700471ADF /* AccountsTableViewController.swift in Sources */, 303 | 408F1A0720596AC500BDC313 /* AppDelegate.swift in Sources */, 304 | 406A8ACF2070BA2D0094BA9A /* Toast.swift in Sources */, 305 | 406A8ACD206FCFBE0094BA9A /* SettingsViewController.swift in Sources */, 306 | ); 307 | runOnlyForDeploymentPostprocessing = 0; 308 | }; 309 | /* End PBXSourcesBuildPhase section */ 310 | 311 | /* Begin PBXVariantGroup section */ 312 | 408F1A0A20596AC500BDC313 /* Main.storyboard */ = { 313 | isa = PBXVariantGroup; 314 | children = ( 315 | 408F1A0B20596AC500BDC313 /* Base */, 316 | ); 317 | name = Main.storyboard; 318 | sourceTree = ""; 319 | }; 320 | 408F1A0F20596AC500BDC313 /* LaunchScreen.storyboard */ = { 321 | isa = PBXVariantGroup; 322 | children = ( 323 | 408F1A1020596AC500BDC313 /* Base */, 324 | ); 325 | name = LaunchScreen.storyboard; 326 | sourceTree = ""; 327 | }; 328 | /* End PBXVariantGroup section */ 329 | 330 | /* Begin XCBuildConfiguration section */ 331 | 408F1A1320596AC500BDC313 /* Debug */ = { 332 | isa = XCBuildConfiguration; 333 | buildSettings = { 334 | ALWAYS_SEARCH_USER_PATHS = NO; 335 | CLANG_ANALYZER_NONNULL = YES; 336 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 337 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 338 | CLANG_CXX_LIBRARY = "libc++"; 339 | CLANG_ENABLE_MODULES = YES; 340 | CLANG_ENABLE_OBJC_ARC = YES; 341 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 342 | CLANG_WARN_BOOL_CONVERSION = YES; 343 | CLANG_WARN_COMMA = YES; 344 | CLANG_WARN_CONSTANT_CONVERSION = YES; 345 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 346 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 347 | CLANG_WARN_EMPTY_BODY = YES; 348 | CLANG_WARN_ENUM_CONVERSION = YES; 349 | CLANG_WARN_INFINITE_RECURSION = YES; 350 | CLANG_WARN_INT_CONVERSION = YES; 351 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 352 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 353 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 354 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 355 | CLANG_WARN_STRICT_PROTOTYPES = YES; 356 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 357 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 358 | CLANG_WARN_UNREACHABLE_CODE = YES; 359 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 360 | CODE_SIGN_IDENTITY = "iPhone Developer"; 361 | COPY_PHASE_STRIP = NO; 362 | DEBUG_INFORMATION_FORMAT = dwarf; 363 | ENABLE_STRICT_OBJC_MSGSEND = YES; 364 | ENABLE_TESTABILITY = YES; 365 | GCC_C_LANGUAGE_STANDARD = gnu11; 366 | GCC_DYNAMIC_NO_PIC = NO; 367 | GCC_NO_COMMON_BLOCKS = YES; 368 | GCC_OPTIMIZATION_LEVEL = 0; 369 | GCC_PREPROCESSOR_DEFINITIONS = ( 370 | "DEBUG=1", 371 | "$(inherited)", 372 | ); 373 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 374 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 375 | GCC_WARN_UNDECLARED_SELECTOR = YES; 376 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 377 | GCC_WARN_UNUSED_FUNCTION = YES; 378 | GCC_WARN_UNUSED_VARIABLE = YES; 379 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 380 | MTL_ENABLE_DEBUG_INFO = YES; 381 | ONLY_ACTIVE_ARCH = YES; 382 | SDKROOT = iphoneos; 383 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 384 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 385 | }; 386 | name = Debug; 387 | }; 388 | 408F1A1420596AC500BDC313 /* Release */ = { 389 | isa = XCBuildConfiguration; 390 | buildSettings = { 391 | ALWAYS_SEARCH_USER_PATHS = NO; 392 | CLANG_ANALYZER_NONNULL = YES; 393 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 394 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 395 | CLANG_CXX_LIBRARY = "libc++"; 396 | CLANG_ENABLE_MODULES = YES; 397 | CLANG_ENABLE_OBJC_ARC = YES; 398 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 399 | CLANG_WARN_BOOL_CONVERSION = YES; 400 | CLANG_WARN_COMMA = YES; 401 | CLANG_WARN_CONSTANT_CONVERSION = YES; 402 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 403 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 404 | CLANG_WARN_EMPTY_BODY = YES; 405 | CLANG_WARN_ENUM_CONVERSION = YES; 406 | CLANG_WARN_INFINITE_RECURSION = YES; 407 | CLANG_WARN_INT_CONVERSION = YES; 408 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 409 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 410 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 411 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 412 | CLANG_WARN_STRICT_PROTOTYPES = YES; 413 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 414 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 415 | CLANG_WARN_UNREACHABLE_CODE = YES; 416 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 417 | CODE_SIGN_IDENTITY = "iPhone Developer"; 418 | COPY_PHASE_STRIP = NO; 419 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 420 | ENABLE_NS_ASSERTIONS = NO; 421 | ENABLE_STRICT_OBJC_MSGSEND = YES; 422 | GCC_C_LANGUAGE_STANDARD = gnu11; 423 | GCC_NO_COMMON_BLOCKS = YES; 424 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 425 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 426 | GCC_WARN_UNDECLARED_SELECTOR = YES; 427 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 428 | GCC_WARN_UNUSED_FUNCTION = YES; 429 | GCC_WARN_UNUSED_VARIABLE = YES; 430 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 431 | MTL_ENABLE_DEBUG_INFO = NO; 432 | SDKROOT = iphoneos; 433 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 434 | VALIDATE_PRODUCT = YES; 435 | }; 436 | name = Release; 437 | }; 438 | 408F1A1620596AC500BDC313 /* Debug */ = { 439 | isa = XCBuildConfiguration; 440 | baseConfigurationReference = 991E11AE5F3F3F3A820B0968 /* Pods-Phimpme.debug.xcconfig */; 441 | buildSettings = { 442 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 443 | CODE_SIGN_STYLE = Automatic; 444 | DEVELOPMENT_TEAM = 7P4K4M8A4Q; 445 | INFOPLIST_FILE = "$(SRCROOT)/Phimpme/Supporting Files/Info.plist"; 446 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 447 | PRODUCT_BUNDLE_IDENTIFIER = "jog.Phimpme-iOS"; 448 | PRODUCT_NAME = "$(TARGET_NAME)"; 449 | SWIFT_VERSION = 4.0; 450 | TARGETED_DEVICE_FAMILY = "1,2"; 451 | }; 452 | name = Debug; 453 | }; 454 | 408F1A1720596AC500BDC313 /* Release */ = { 455 | isa = XCBuildConfiguration; 456 | baseConfigurationReference = FE33A7B2AAB0D992BB6E0FB7 /* Pods-Phimpme.release.xcconfig */; 457 | buildSettings = { 458 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 459 | CODE_SIGN_STYLE = Automatic; 460 | DEVELOPMENT_TEAM = 7P4K4M8A4Q; 461 | INFOPLIST_FILE = "$(SRCROOT)/Phimpme/Supporting Files/Info.plist"; 462 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 463 | PRODUCT_BUNDLE_IDENTIFIER = "jog.Phimpme-iOS"; 464 | PRODUCT_NAME = "$(TARGET_NAME)"; 465 | SWIFT_VERSION = 4.0; 466 | TARGETED_DEVICE_FAMILY = "1,2"; 467 | }; 468 | name = Release; 469 | }; 470 | /* End XCBuildConfiguration section */ 471 | 472 | /* Begin XCConfigurationList section */ 473 | 408F19FE20596AC400BDC313 /* Build configuration list for PBXProject "Phimpme" */ = { 474 | isa = XCConfigurationList; 475 | buildConfigurations = ( 476 | 408F1A1320596AC500BDC313 /* Debug */, 477 | 408F1A1420596AC500BDC313 /* Release */, 478 | ); 479 | defaultConfigurationIsVisible = 0; 480 | defaultConfigurationName = Release; 481 | }; 482 | 408F1A1520596AC500BDC313 /* Build configuration list for PBXNativeTarget "Phimpme" */ = { 483 | isa = XCConfigurationList; 484 | buildConfigurations = ( 485 | 408F1A1620596AC500BDC313 /* Debug */, 486 | 408F1A1720596AC500BDC313 /* Release */, 487 | ); 488 | defaultConfigurationIsVisible = 0; 489 | defaultConfigurationName = Release; 490 | }; 491 | /* End XCConfigurationList section */ 492 | }; 493 | rootObject = 408F19FB20596AC400BDC313 /* Project object */; 494 | } 495 | -------------------------------------------------------------------------------- /Phimpme.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Phimpme.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-40x40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-60x60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon-App-20x20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-29x29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@2x-1.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-40x40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-76x76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-83.5x83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "ItunesArtwork@2x.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/AppThemeColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "0.000", 13 | "alpha" : "1.000", 14 | "blue" : "0.816", 15 | "green" : "0.494" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/Arrow-back.imageset/Arrow-back.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/Arrow-back.imageset/Arrow-back.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/Arrow-back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Arrow-back.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/account-fill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "account-fill.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/account-fill.imageset/account-fill.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/account-fill.imageset/account-fill.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/accounts.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "accounts.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/accounts.imageset/accounts.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/accounts.imageset/accounts.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/albums.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "albums.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/albums.imageset/albums.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/albums.imageset/albums.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/box-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "box-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/box-icon.imageset/box-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/box-icon.imageset/box-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/camera-fill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "camera-fill.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/camera-fill.imageset/camera-fill.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/camera-fill.imageset/camera-fill.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/camera.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "camera.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/camera.imageset/camera.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/camera.imageset/camera.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/check-all.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "check-all.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/check-all.imageset/check-all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/check-all.imageset/check-all.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/dropbox-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "dropbox-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/dropbox-icon.imageset/dropbox-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/dropbox-icon.imageset/dropbox-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/facebook-circled-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "facebook-circled-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/facebook-circled-icon.imageset/facebook-circled-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/facebook-circled-icon.imageset/facebook-circled-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/flickr-filled-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "flickr-filled-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/flickr-filled-icon.imageset/flickr-filled-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/flickr-filled-icon.imageset/flickr-filled-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/gallery-fill.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "gallery-fill.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/gallery-fill.imageset/gallery-fill.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/gallery-fill.imageset/gallery-fill.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/gallery.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "gallery.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/gallery.imageset/gallery.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/gallery.imageset/gallery.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "hidden-folder-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "hidden-folder-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "hidden-folder-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/hidden-folder-icon.imageset/hidden-folder-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/image-preview.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "image-preview.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/image-preview.imageset/image-preview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/image-preview.imageset/image-preview.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/info-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "info-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "info-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "info-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/info-icon.imageset/info-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/instagram-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "instagram-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/instagram-icon.imageset/instagram-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/instagram-icon.imageset/instagram-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "local-folder-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "local-folder-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "local-folder-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/local-folder-icon.imageset/local-folder-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "menu.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/menu.imageset/menu.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/menu.imageset/menu.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/more.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "more.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/more.imageset/more.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/more.imageset/more.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/nextcloud-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "nextcloud-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/nextcloud-icon.imageset/nextcloud-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/nextcloud-icon.imageset/nextcloud-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/owncloud-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "owncloud-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/owncloud-icon.imageset/owncloud-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/owncloud-icon.imageset/owncloud-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/phimpme-logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "phimpme-logo.png" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/phimpme-logo.imageset/phimpme-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/phimpme-logo.imageset/phimpme-logo.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/phimpme_logo_splash.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "phimpme_logo_splash.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/phimpme_logo_splash.imageset/phimpme_logo_splash.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/phimpme_logo_splash.imageset/phimpme_logo_splash.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/pinterest-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pinterest-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/pinterest-icon.imageset/pinterest-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/pinterest-icon.imageset/pinterest-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "rate-us-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "rate-us-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "rate-us-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/rate-us-icon.imageset/rate-us-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/settings-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "settings-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "settings-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "settings-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/settings-icon.imageset/settings-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/share-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "share-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "share-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "share-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/share-icon.imageset/share-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/total-photos.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "total-photos.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/total-photos.imageset/total-photos.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/total-photos.imageset/total-photos.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/tumblr-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "tumblr-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/tumblr-icon.imageset/tumblr-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/tumblr-icon.imageset/tumblr-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/twitter-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "twitter-icon.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/twitter-icon.imageset/twitter-icon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/twitter-icon.imageset/twitter-icon.pdf -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "upload-progress-icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "upload-progress-icon@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "upload-progress-icon@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon@2x.png -------------------------------------------------------------------------------- /Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/Phimpme/Assets/Assets.xcassets/upload-progress-icon.imageset/upload-progress-icon@3x.png -------------------------------------------------------------------------------- /Phimpme/Controllers/AccountsTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AccountsTableViewController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 20/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class AccountsTableViewController: UITableViewController { 12 | 13 | var accountsName: [String] = [ControllerConstants.Accounts.facebook, ControllerConstants.Accounts.twitter, ControllerConstants.Accounts.instagram, ControllerConstants.Accounts.nextCloud, ControllerConstants.Accounts.pinterest, ControllerConstants.Accounts.flickr, ControllerConstants.Accounts.dropBox, ControllerConstants.Accounts.owncloud, ControllerConstants.Accounts.box, ControllerConstants.Accounts.tumblr] 14 | var accountsImages: [UIImage?] = [ControllerConstants.Images.facebookCircledIcon, ControllerConstants.Images.twitterIcon, ControllerConstants.Images.instagramIcon, ControllerConstants.Images.nextCloudIcon, ControllerConstants.Images.pinterestIcon, ControllerConstants.Images.flickrFilledIcon, ControllerConstants.Images.dropBoxIcon, ControllerConstants.Images.owncloudIcon, ControllerConstants.Images.boxIcon, ControllerConstants.Images.tumblrIcon] 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | self.clearsSelectionOnViewWillAppear = true 20 | 21 | } 22 | 23 | // MARK: - Table view data source 24 | 25 | override func numberOfSections(in tableView: UITableView) -> Int { 26 | return 1 27 | } 28 | 29 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 30 | return accountsName.count 31 | } 32 | 33 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 34 | let cell = tableView.dequeueReusableCell(withIdentifier: ControllerConstants.accountsCellIdentifier, for: indexPath) 35 | cell.textLabel?.text = accountsName[indexPath.row] 36 | cell.imageView?.image = accountsImages[indexPath.row] 37 | 38 | let switchView = UISwitch(frame: .zero) 39 | switchView.setOn(false, animated: true) 40 | switchView.tag = indexPath.row // for detect which row switch Changed 41 | switchView.addTarget(self, action: #selector(self.switchChanged(_:)), for: .valueChanged) 42 | cell.accessoryView = switchView 43 | 44 | return cell 45 | } 46 | 47 | override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 48 | return 44.0 49 | } 50 | 51 | @objc func switchChanged(_ sender: UISwitch!) { 52 | print("table row switch Changed \(sender.tag)") 53 | print("The switch is \(sender.isOn ? "ON" : "OFF")") 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /Phimpme/Controllers/CameraViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraViewController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 20/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CameraViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | } 17 | 18 | override var preferredStatusBarStyle: UIStatusBarStyle { 19 | return .lightContent 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /Phimpme/Controllers/GalleryViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Phimpme-iOS 4 | // 5 | // Created by JOGENDRA on 14/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class GalleryViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | } 17 | 18 | @IBAction func didTapSettingsMenu(_ sender: Any) { 19 | guard let settingsViewController = UIStoryboard.settingsVC() as? SettingsViewController else { 20 | return 21 | } 22 | if let navigation = navigationController { 23 | navigation.pushViewController(settingsViewController, animated: true) 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Phimpme/Controllers/MainTabBarViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainTabBarViewController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 22/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import NMAnimatedTabBarItem 11 | 12 | enum TabBarPage: Int { 13 | case camera 14 | case gallery 15 | case accounts 16 | } 17 | 18 | class MainTabBarViewController: UITabBarController, UITabBarControllerDelegate { 19 | 20 | var animatedTabBar = NMAnimateTabBarItem() 21 | 22 | override func viewDidLoad() { 23 | super.viewDidLoad() 24 | self.selectedIndex = 1 25 | self.delegate = self 26 | } 27 | 28 | // MARK: - UITabBarControllerDelegate 29 | 30 | func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 31 | let indexOfTab = tabBarController.viewControllers?.index(of: viewController) 32 | var animationType: NMAnimationtype? 33 | switch indexOfTab { 34 | case TabBarPage.camera.rawValue?: 35 | animationType = NMAnimationtype.Bounce 36 | case TabBarPage.gallery.rawValue?: 37 | animationType = NMAnimationtype.Transition 38 | animatedTabBar.transitionOptions = UIViewAnimationOptions.transitionFlipFromBottom 39 | case TabBarPage.accounts.rawValue?: 40 | animationType = NMAnimationtype.Rotation 41 | animatedTabBar.direction = NMRotationDirection.right 42 | default: 43 | break 44 | } 45 | animatedTabBar.animateTabBarItem(self.tabBar, indexOfTab!, animationType!) 46 | return true 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Phimpme/Controllers/MenuViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MenuViewController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 21/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | private struct DefaultConstants { 12 | static let menuViewsCornerRadius: CGFloat = 8.0 13 | } 14 | 15 | class MenuViewController: UIViewController { 16 | 17 | @IBOutlet weak var shareFolderView: UIView! 18 | 19 | @IBOutlet weak var hiddenFolderView: UIView! 20 | 21 | @IBOutlet weak var settingsView: UIView! 22 | 23 | @IBOutlet weak var rateUsView: UIView! 24 | 25 | @IBOutlet weak var uploadHistoryView: UIView! 26 | 27 | @IBOutlet weak var sharePhimpmeView: UIView! 28 | 29 | @IBOutlet weak var aboutPhimpmeView: UIView! 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | initialUISetups() 34 | } 35 | 36 | private func initialUISetups() { 37 | // Set corner radius 38 | shareFolderView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 39 | hiddenFolderView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 40 | settingsView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 41 | rateUsView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 42 | uploadHistoryView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 43 | sharePhimpmeView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 44 | aboutPhimpmeView.layer.cornerRadius = DefaultConstants.menuViewsCornerRadius 45 | } 46 | 47 | @IBAction func didTapBackButton(_ sender: Any) { 48 | self.dismiss(animated: true, completion: nil) 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /Phimpme/Controllers/SettingsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsViewController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 31/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SettingsViewController: UITableViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | self.clearsSelectionOnViewWillAppear = false 17 | } 18 | 19 | // MARK: - Table view data source 20 | 21 | override func numberOfSections(in tableView: UITableView) -> Int { 22 | return 3 23 | } 24 | 25 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 26 | return 4 27 | } 28 | 29 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 30 | let cell = tableView.dequeueReusableCell(withIdentifier: ControllerConstants.settingsCellIdentifier, for: indexPath) 31 | 32 | return cell 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Phimpme/Helpers/ControllerConstants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ControllerConstants.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 25/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ControllerConstants { 13 | 14 | static let accountsCellIdentifier: String = "accountsCell" 15 | static let settingsCellIdentifier: String = "settingsCell" 16 | 17 | struct Accounts { 18 | static let facebook: String = "Facebook" 19 | static let twitter: String = "Twitter" 20 | static let instagram: String = "Instagram" 21 | static let nextCloud: String = "NextCloud" 22 | static let pinterest: String = "Pinterest" 23 | static let flickr: String = "Flickr" 24 | static let dropBox: String = "Dropbox" 25 | static let owncloud: String = "Owncloud" 26 | static let box: String = "Box" 27 | static let tumblr: String = "Tumblr" 28 | } 29 | 30 | struct Images { 31 | static let facebookCircledIcon = UIImage(named: "facebook-circled-icon") 32 | static let twitterIcon = UIImage(named: "twitter-icon") 33 | static let instagramIcon = UIImage(named: "instagram-icon") 34 | static let nextCloudIcon = UIImage(named: "nextcloud-icon") 35 | static let pinterestIcon = UIImage(named: "pinterest-icon") 36 | static let flickrFilledIcon = UIImage(named: "flickr-filled-icon") 37 | static let dropBoxIcon = UIImage(named: "dropbox-icon") 38 | static let owncloudIcon = UIImage(named: "owncloud-icon") 39 | static let boxIcon = UIImage(named: "box-icon") 40 | static let tumblrIcon = UIImage(named: "tumblr-icon") 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Phimpme/Helpers/Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Extensions.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 01/04/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIStoryboard { 13 | 14 | class func mainStoryboard() -> UIStoryboard { return UIStoryboard(name: "Main", bundle: Bundle.main) } 15 | 16 | class func initialVC() -> UIViewController { 17 | return mainStoryboard().instantiateViewController(withIdentifier: "InitialViewController") 18 | } 19 | 20 | class func settingsVC() -> UIViewController { 21 | return mainStoryboard().instantiateViewController(withIdentifier: "SettingsViewController") 22 | } 23 | } 24 | 25 | extension UIApplication { 26 | 27 | class func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { 28 | if let nav = base as? UINavigationController { 29 | return topViewController(nav.visibleViewController) 30 | } 31 | if let tab = base as? UITabBarController { 32 | if let selected = tab.selectedViewController { 33 | return topViewController(selected) 34 | } 35 | } 36 | if let presented = base?.presentedViewController { 37 | return topViewController(presented) 38 | } 39 | return base 40 | } 41 | } 42 | 43 | extension UIViewController { 44 | func hideKeyboardWhenTappedAround() { 45 | let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard)) 46 | view.addGestureRecognizer(tap) 47 | } 48 | 49 | @objc func dismissKeyboard() { 50 | view.endEditing(true) 51 | } 52 | } 53 | 54 | extension UIButton { 55 | func centerTextAndImage(spacing: CGFloat) { 56 | let insetAmount = spacing / 2 57 | imageEdgeInsets = UIEdgeInsets(top: 0, left: -insetAmount, bottom: 0, right: insetAmount) 58 | titleEdgeInsets = UIEdgeInsets(top: 0, left: insetAmount, bottom: 0, right: -insetAmount) 59 | contentEdgeInsets = UIEdgeInsets(top: 0, left: insetAmount, bottom: 0, right: insetAmount) 60 | } 61 | 62 | func verticleAlignTextAndImage(withSpacing spacing: CGFloat) { 63 | let titleSize = titleLabel!.frame.size 64 | let imageSize = imageView!.frame.size 65 | 66 | titleEdgeInsets = UIEdgeInsets(top: 0, left: -imageSize.width, bottom: -(imageSize.height + spacing), right: 0) 67 | imageEdgeInsets = UIEdgeInsets(top: -(titleSize.height + spacing), left: -imageSize.width/2, bottom: 0, right: -titleSize.width) 68 | } 69 | 70 | func leftAlignedTextAndImage(spacing: CGFloat) { 71 | let insetAmount = spacing / 2 72 | imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: insetAmount) 73 | titleEdgeInsets = UIEdgeInsets(top: 0, left: insetAmount, bottom: 0, right: 0) 74 | contentEdgeInsets = UIEdgeInsets(top: 0, left: insetAmount, bottom: 0, right: insetAmount) 75 | } 76 | } 77 | 78 | extension UIColor { 79 | 80 | class var appThemeColor: UIColor { 81 | return UIColor(rgb: 0x007ED0) 82 | } 83 | 84 | class var toastGreen: UIColor { 85 | return UIColor(rgb: 0x0C743B) 86 | } 87 | class var toastGray: UIColor { 88 | return UIColor(rgb: 0xAAAAAA) 89 | } 90 | 91 | class var grayText: UIColor { 92 | return UIColor(rgb: 0x111111) 93 | } 94 | 95 | class var grayLight: UIColor { 96 | return UIColor(rgb: 0xcacaca) 97 | } 98 | 99 | class var appWarmGrey: UIColor { 100 | return UIColor(white: 155.0 / 255.0, alpha: 1.0) 101 | } 102 | 103 | class var appLighterWarmGrey: UIColor { 104 | return UIColor(white: 151.0 / 255.0, alpha: 1.0) 105 | } 106 | 107 | class var appGreyishBrown: UIColor { 108 | return UIColor(white: 74.0 / 255.0, alpha: 1.0) 109 | } 110 | 111 | class var appWhiteButNot: UIColor { 112 | return UIColor(red: 234.0 / 255.0, green: 233.0 / 255.0, blue: 233.0 / 255.0, alpha: 1.0) 113 | } 114 | 115 | class var iosRed: UIColor { 116 | return UIColor(red: 255/255, green: 59/255, blue: 48/255, alpha: 1.0) 117 | } 118 | 119 | class var iosOrange: UIColor { 120 | return UIColor(red: 255/255, green: 149/255, blue: 0/255, alpha: 1.0) 121 | } 122 | 123 | class var iosYellow: UIColor { 124 | return UIColor(red: 255/255, green: 204/255, blue: 0/255, alpha: 1.0) 125 | } 126 | 127 | class var iosGreen: UIColor { 128 | return UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1.0) 129 | } 130 | 131 | class var iosTealBlue: UIColor { 132 | return UIColor(red: 90/255, green: 200/255, blue: 250/255, alpha: 1.0) 133 | } 134 | 135 | class var iosBlue: UIColor { 136 | return UIColor(red: 0/255, green: 122/255, blue: 255/255, alpha: 1.0) 137 | } 138 | 139 | class var iosPurple: UIColor { 140 | return UIColor(red: 88/255, green: 66/255, blue: 214/255, alpha: 1.0) 141 | } 142 | 143 | class var iosPink: UIColor { 144 | return UIColor(red: 255/255, green: 45/255, blue: 85/255, alpha: 1.0) 145 | } 146 | 147 | convenience init(rgb: UInt) { 148 | self.init( 149 | red: CGFloat((rgb & 0xFF0000) >> 16) / 255.0, 150 | green: CGFloat((rgb & 0x00FF00) >> 8) / 255.0, 151 | blue: CGFloat(rgb & 0x0000FF) / 255.0, 152 | alpha: CGFloat(1.0) 153 | ) 154 | } 155 | 156 | } 157 | -------------------------------------------------------------------------------- /Phimpme/Helpers/Toast.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toast.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 01/04/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | /* 12 | * Infix overload method 13 | */ 14 | func /(lhs: CGFloat, rhs: Int) -> CGFloat { 15 | return lhs / CGFloat(rhs) 16 | } 17 | 18 | /* 19 | * Toast Config 20 | */ 21 | let toastDefaultDuration = 2.0 22 | let toastFadeDuration = 0.2 23 | let toastHorizontalMargin: CGFloat = 10.0 24 | let toastVerticalMargin: CGFloat = 10.0 25 | 26 | let toastPositionDefault = "bottom" 27 | let toastPositionTop = "top" 28 | let toastPositionCenter = "center" 29 | 30 | // activity 31 | let toastActivityWidth: CGFloat = 100.0 32 | let toastActivityHeight: CGFloat = 100.0 33 | let toastActivityPositionDefault = "center" 34 | 35 | // image size 36 | let toastImageViewWidth: CGFloat = 80.0 37 | let toastImageViewHeight: CGFloat = 80.0 38 | 39 | // label setting 40 | let toastMaxWidth: CGFloat = 0.8; // 80% of parent view width 41 | let toastMaxHeight: CGFloat = 0.8 42 | let toastFontSize: CGFloat = 16.0 43 | let toastMaxTitleLines = 0 44 | let toastMaxMessageLines = 0 45 | 46 | // shadow appearance 47 | let toastShadowOpacity: CGFloat = 0.8 48 | let toastShadowRadius: CGFloat = 6.0 49 | let toastShadowOffset: CGSize = CGSize(width: CGFloat(4.0), height: CGFloat(4.0)) 50 | 51 | let toastOpacity: CGFloat = 0.8 52 | let toastCornerRadius: CGFloat = 10.0 53 | 54 | var toastActivityView: UnsafePointer? 55 | var toastTimer: UnsafePointer? 56 | var toastView: UnsafePointer? 57 | 58 | /* 59 | * Custom Config 60 | */ 61 | let toastHidesOnTap = true 62 | let toastDisplayShadow = true 63 | 64 | var yPositionOfToast: CGFloat = 0.0 65 | 66 | //toast (UIView + Toast using Swift) 67 | 68 | extension UIView { 69 | 70 | /* 71 | * public methods 72 | */ 73 | func makeToast(message msg: String) { 74 | // self.makeToast(message: msg, duration: toastDefaultDuration, position: toastPositionDefault as AnyObject) 75 | } 76 | 77 | func showToast(message msg: String) { 78 | self.makeToast(message: msg, duration: toastDefaultDuration, position: toastPositionDefault as AnyObject) 79 | } 80 | 81 | func makeToast(message msg: String, yPosition: CGFloat) { 82 | yPositionOfToast = yPosition 83 | self.makeToast(message: msg, duration: toastDefaultDuration, position: toastPositionDefault as AnyObject) 84 | } 85 | 86 | func makeToast(message msg: String, duration: Double, position: AnyObject) { 87 | let toast = self.viewForMessage(msg, title: nil, image: nil) 88 | self.showToast(toast!, duration: duration, position: position) 89 | } 90 | 91 | func makeToast(message msg: String, duration: Double, position: AnyObject, title: String) { 92 | let toast = self.viewForMessage(msg, title: title, image: nil) 93 | self.showToast(toast!, duration: duration, position: position) 94 | } 95 | 96 | func makeToast(message msg: String, duration: Double, position: AnyObject, image: UIImage) { 97 | let toast = self.viewForMessage(msg, title: nil, image: image) 98 | self.showToast(toast!, duration: duration, position: position) 99 | } 100 | 101 | func makeToast(message msg: String, duration: Double, position: AnyObject, title: String, image: UIImage) { 102 | let toast = self.viewForMessage(msg, title: title, image: image) 103 | self.showToast(toast!, duration: duration, position: position) 104 | } 105 | 106 | func showToast(_ toast: UIView) { 107 | self.showToast(toast, duration: toastDefaultDuration, position: toastPositionDefault as AnyObject) 108 | } 109 | 110 | func showToast(_ toast: UIView, duration: Double, position: AnyObject) { 111 | let existToast = objc_getAssociatedObject(self, &toastView) as! UIView? 112 | if existToast != nil { 113 | if let timer = objc_getAssociatedObject(existToast, &toastTimer) as? Timer { 114 | timer.invalidate() 115 | self.hideToast(existToast!, force: false) 116 | } 117 | } 118 | 119 | toast.center = self.centerPointForPosition(position, toast: toast) 120 | toast.alpha = 0.0 121 | 122 | if (yPositionOfToast != 0.0) { 123 | toast.frame.origin.y = yPositionOfToast 124 | yPositionOfToast = 0.0 125 | } 126 | 127 | if toastHidesOnTap { 128 | let tapRecognizer = UITapGestureRecognizer(target: toast, action: #selector(UIView.handleToastTapped(_:))) 129 | toast.addGestureRecognizer(tapRecognizer) 130 | toast.isUserInteractionEnabled = true 131 | toast.isExclusiveTouch = true 132 | } 133 | 134 | self.addSubview(toast) 135 | objc_setAssociatedObject(self, &toastView, toast, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN) 136 | 137 | UIView.animate(withDuration: toastFadeDuration, 138 | delay: 0.0, options: ([.curveEaseOut, .allowUserInteraction]), 139 | animations: { 140 | toast.alpha = 1.0 141 | }, 142 | completion: { (finished: Bool) in 143 | let timer = Timer.scheduledTimer(timeInterval: duration, target: self, selector: #selector(UIView.toastTimerDidFinish(_:)), userInfo: toast, repeats: false) 144 | objc_setAssociatedObject(toast, &toastTimer, timer, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 145 | }) 146 | } 147 | 148 | func makeToastActivity() { 149 | self.makeToastActivity(position: toastActivityPositionDefault as AnyObject) 150 | } 151 | 152 | func makeToastActivityWithMessage(message msg: String) { 153 | self.makeToastActivity(position: toastActivityPositionDefault as AnyObject, message: msg) 154 | } 155 | 156 | func makeToastActivity(position pos: AnyObject, message msg: String = "") { 157 | let existToast = objc_getAssociatedObject(self, &toastView) as! UIView? 158 | if existToast != nil { 159 | if let timer = objc_getAssociatedObject(existToast, &toastTimer) as? Timer { 160 | timer.invalidate() 161 | self.hideToast(existToast!, force: false) 162 | } 163 | } 164 | 165 | let existingActivityView: UIView? = objc_getAssociatedObject(self, &toastActivityView) as? UIView 166 | if existingActivityView != nil { return } 167 | 168 | let activityView = UIView(frame: CGRect(x: 0, y: 0, width: toastActivityWidth, height: toastActivityHeight)) 169 | activityView.center = self.centerPointForPosition(pos, toast: activityView) 170 | activityView.backgroundColor = UIColor.black.withAlphaComponent(toastOpacity) 171 | activityView.alpha = 0.0 172 | activityView.autoresizingMask = ([.flexibleLeftMargin, .flexibleTopMargin, .flexibleRightMargin, .flexibleBottomMargin]) 173 | activityView.layer.cornerRadius = toastCornerRadius 174 | 175 | if toastDisplayShadow { 176 | activityView.layer.shadowColor = UIColor.black.cgColor 177 | activityView.layer.shadowOpacity = Float(toastShadowOpacity) 178 | activityView.layer.shadowRadius = toastShadowRadius 179 | activityView.layer.shadowOffset = toastShadowOffset 180 | } 181 | 182 | let activityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge) 183 | activityIndicatorView.center = CGPoint(x: activityView.bounds.size.width / 2, y: activityView.bounds.size.height / 2) 184 | activityView.addSubview(activityIndicatorView) 185 | activityIndicatorView.startAnimating() 186 | 187 | if (!msg.isEmpty) { 188 | activityIndicatorView.frame.origin.y -= 10 189 | let activityMessageLabel = UILabel(frame: CGRect(x: activityView.bounds.origin.x, y: (activityIndicatorView.frame.origin.y + activityIndicatorView.frame.size.height + 10), width: activityView.bounds.size.width, height: 20)) 190 | activityMessageLabel.textColor = UIColor.white 191 | activityMessageLabel.font = (msg.characters.count<=10) ? UIFont(name: "Roboto-Light", size: 14) : UIFont(name: "Roboto-Light", size: 13) 192 | activityMessageLabel.textAlignment = .center 193 | activityMessageLabel.text = msg 194 | activityView.addSubview(activityMessageLabel) 195 | } 196 | 197 | self.addSubview(activityView) 198 | 199 | // associate activity view with self 200 | objc_setAssociatedObject(self, &toastActivityView, activityView, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 201 | 202 | UIView.animate(withDuration: toastFadeDuration, 203 | delay: 0.0, 204 | options: UIViewAnimationOptions.curveEaseOut, 205 | animations: { 206 | activityView.alpha = 1.0 207 | }, 208 | completion: nil) 209 | } 210 | 211 | func hideToastActivity() { 212 | let existingActivityView = objc_getAssociatedObject(self, &toastActivityView) as! UIView? 213 | if existingActivityView == nil { return } 214 | UIView.animate(withDuration: toastFadeDuration, 215 | delay: 0.0, 216 | options: UIViewAnimationOptions.curveEaseOut, 217 | animations: { 218 | existingActivityView!.alpha = 0.0 219 | }, 220 | completion: { (finished: Bool) in 221 | existingActivityView!.removeFromSuperview() 222 | objc_setAssociatedObject(self, &toastActivityView, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 223 | }) 224 | } 225 | 226 | /* 227 | * private methods (helper) 228 | */ 229 | func hideToast(_ toast: UIView) { 230 | self.hideToast(toast, force: false) 231 | } 232 | 233 | func hideToast(_ toast: UIView, force: Bool) { 234 | let completeClosure = { (finish: Bool) -> Void in 235 | toast.removeFromSuperview() 236 | objc_setAssociatedObject(self, &toastTimer, nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 237 | } 238 | 239 | if force { 240 | completeClosure(true) 241 | } else { 242 | UIView.animate(withDuration: toastFadeDuration, 243 | delay: 0.0, 244 | options: ([.curveEaseIn, .beginFromCurrentState]), 245 | animations: { 246 | toast.alpha = 0.0 247 | }, 248 | completion: completeClosure) 249 | } 250 | } 251 | 252 | @objc func toastTimerDidFinish(_ timer: Timer) { 253 | self.hideToast(timer.userInfo as! UIView) 254 | } 255 | 256 | @objc func handleToastTapped(_ recognizer: UITapGestureRecognizer) { 257 | // var timer = objc_getAssociatedObject(self, &toastTimer) as! NSTimer 258 | // timer.invalidate() 259 | // 260 | // self.hideToast(toast: recognizer.view!) 261 | } 262 | 263 | func centerPointForPosition(_ position: AnyObject, toast: UIView) -> CGPoint { 264 | if position is String { 265 | let toastSize = toast.bounds.size 266 | let viewSize = self.bounds.size 267 | if position.lowercased == toastPositionTop { 268 | return CGPoint(x: viewSize.width/2, y: toastSize.height/2 + toastVerticalMargin - 50) 269 | } else if position.lowercased == toastPositionDefault { 270 | return CGPoint(x: viewSize.width/2, y: viewSize.height - toastSize.height/2 - toastVerticalMargin - 50) 271 | } else if position.lowercased == toastPositionCenter { 272 | return CGPoint(x: viewSize.width/2, y: viewSize.height/2 - 50) 273 | } 274 | } else if position is NSValue { 275 | return position.cgPointValue 276 | } 277 | 278 | NSLog("Warning: Invalid position for toast.") 279 | return self.centerPointForPosition(toastPositionDefault as AnyObject, toast: toast) 280 | } 281 | 282 | func viewForMessage(_ msg: String?, title: String?, image: UIImage?) -> UIView? { 283 | if msg == nil && title == nil && image == nil { return nil } 284 | 285 | var msgLabel: UILabel? 286 | var titleLabel: UILabel? 287 | var imageView: UIImageView? 288 | 289 | let wrapperView = UIView() 290 | wrapperView.autoresizingMask = ([.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin, .flexibleBottomMargin]) 291 | wrapperView.layer.cornerRadius = toastCornerRadius 292 | wrapperView.backgroundColor = UIColor.black.withAlphaComponent(toastOpacity) 293 | 294 | if toastDisplayShadow { 295 | wrapperView.layer.shadowColor = UIColor.black.cgColor 296 | wrapperView.layer.shadowOpacity = Float(toastShadowOpacity) 297 | wrapperView.layer.shadowRadius = toastShadowRadius 298 | wrapperView.layer.shadowOffset = toastShadowOffset 299 | } 300 | 301 | if image != nil { 302 | imageView = UIImageView(image: image) 303 | imageView!.contentMode = .scaleAspectFit 304 | imageView!.frame = CGRect(x: toastHorizontalMargin, y: toastVerticalMargin, width: CGFloat(toastImageViewWidth), height: CGFloat(toastImageViewHeight)) 305 | } 306 | 307 | var imageWidth: CGFloat, imageHeight: CGFloat, imageLeft: CGFloat 308 | if imageView != nil { 309 | imageWidth = imageView!.bounds.size.width 310 | imageHeight = imageView!.bounds.size.height 311 | imageLeft = toastHorizontalMargin 312 | } else { 313 | imageWidth = 0.0; imageHeight = 0.0; imageLeft = 0.0 314 | } 315 | 316 | if title != nil { 317 | titleLabel = UILabel() 318 | titleLabel!.numberOfLines = toastMaxTitleLines 319 | titleLabel!.font = UIFont.boldSystemFont(ofSize: toastFontSize) 320 | titleLabel!.textAlignment = .center 321 | titleLabel!.lineBreakMode = .byWordWrapping 322 | titleLabel!.textColor = UIColor.white 323 | titleLabel!.backgroundColor = UIColor.clear 324 | titleLabel!.alpha = 1.0 325 | titleLabel!.text = title 326 | 327 | // size the title label according to the length of the text 328 | let maxSizeTitle = CGSize(width: (self.bounds.size.width * toastMaxWidth) - imageWidth, height: self.bounds.size.height * toastMaxHeight) 329 | let expectedHeight = title!.stringHeightWithFontSize(toastFontSize, width: maxSizeTitle.width) 330 | titleLabel!.frame = CGRect(x: 0.0, y: 0.0, width: maxSizeTitle.width, height: expectedHeight) 331 | } 332 | 333 | if msg != nil { 334 | msgLabel = UILabel() 335 | msgLabel!.numberOfLines = toastMaxMessageLines 336 | msgLabel!.font = UIFont.systemFont(ofSize: toastFontSize) 337 | msgLabel!.lineBreakMode = .byWordWrapping 338 | msgLabel!.textAlignment = .center 339 | msgLabel!.textColor = UIColor.white 340 | msgLabel!.backgroundColor = UIColor.clear 341 | msgLabel!.alpha = 1.0 342 | msgLabel!.text = msg 343 | 344 | let maxSizeMessage = CGSize(width: (self.bounds.size.width * toastMaxWidth) - imageWidth, height: self.bounds.size.height * toastMaxHeight) 345 | let expectedHeight = msg!.stringHeightWithFontSize(toastFontSize, width: maxSizeMessage.width) 346 | msgLabel!.frame = CGRect(x: 0.0, y: 0.0, width: maxSizeMessage.width, height: expectedHeight) 347 | } 348 | 349 | var titleWidth: CGFloat, titleHeight: CGFloat, titleTop: CGFloat, titleLeft: CGFloat 350 | if titleLabel != nil { 351 | titleWidth = titleLabel!.bounds.size.width 352 | titleHeight = titleLabel!.bounds.size.height 353 | titleTop = toastVerticalMargin 354 | titleLeft = imageLeft + imageWidth + toastHorizontalMargin 355 | } else { 356 | titleWidth = 0.0; titleHeight = 0.0; titleTop = 0.0; titleLeft = 0.0 357 | } 358 | 359 | var msgWidth: CGFloat, msgHeight: CGFloat, msgTop: CGFloat, msgLeft: CGFloat 360 | if msgLabel != nil { 361 | msgWidth = msgLabel!.bounds.size.width 362 | msgHeight = msgLabel!.bounds.size.height 363 | msgTop = titleTop + titleHeight + toastVerticalMargin 364 | msgLeft = imageLeft + imageWidth + toastHorizontalMargin 365 | } else { 366 | msgWidth = 0.0; msgHeight = 0.0; msgTop = 0.0; msgLeft = 0.0 367 | } 368 | 369 | let largerWidth = max(titleWidth, msgWidth) 370 | let largerLeft = max(titleLeft, msgLeft) 371 | 372 | // set wrapper view's frame 373 | let wrapperWidth = max(imageWidth + toastHorizontalMargin * 2, largerLeft + largerWidth + toastHorizontalMargin) 374 | let wrapperHeight = max(msgTop + msgHeight + toastVerticalMargin, imageHeight + toastVerticalMargin * 2) 375 | wrapperView.frame = CGRect(x: 0.0, y: 0.0, width: wrapperWidth, height: wrapperHeight) 376 | 377 | // add subviews 378 | if titleLabel != nil { 379 | titleLabel!.frame = CGRect(x: titleLeft, y: titleTop, width: titleWidth, height: titleHeight) 380 | wrapperView.addSubview(titleLabel!) 381 | } 382 | if msgLabel != nil { 383 | msgLabel!.frame = CGRect(x: msgLeft, y: msgTop, width: msgWidth, height: msgHeight) 384 | wrapperView.addSubview(msgLabel!) 385 | } 386 | if imageView != nil { 387 | wrapperView.addSubview(imageView!) 388 | } 389 | 390 | return wrapperView 391 | } 392 | 393 | } 394 | 395 | extension String { 396 | 397 | func stringHeightWithFontSize(_ fontSize: CGFloat, width: CGFloat) -> CGFloat { 398 | let font = UIFont.systemFont(ofSize: fontSize) 399 | let size = CGSize(width: width, height: CGFloat.greatestFiniteMagnitude) 400 | let paragraphStyle = NSMutableParagraphStyle() 401 | paragraphStyle.lineBreakMode = .byWordWrapping 402 | let attributes = [NSAttributedStringKey.font:font, 403 | NSAttributedStringKey.paragraphStyle:paragraphStyle.copy()] 404 | 405 | let text = self as NSString 406 | let rect = text.boundingRect(with: size, options: .usesLineFragmentOrigin, attributes: attributes, context: nil) 407 | return rect.size.height 408 | } 409 | 410 | } 411 | -------------------------------------------------------------------------------- /Phimpme/Services/CameraController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CameraController.swift 3 | // Phimpme 4 | // 5 | // Created by JOGENDRA on 01/04/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AVFoundation 11 | 12 | class CameraController: NSObject { 13 | var captureSession: AVCaptureSession? 14 | 15 | var currentCameraPosition: CameraPosition? 16 | 17 | var frontCamera: AVCaptureDevice? 18 | var frontCameraInput: AVCaptureDeviceInput? 19 | 20 | var photoOutput: AVCapturePhotoOutput? 21 | 22 | var rearCamera: AVCaptureDevice? 23 | var rearCameraInput: AVCaptureDeviceInput? 24 | 25 | var previewLayer: AVCaptureVideoPreviewLayer? 26 | 27 | var flashMode = AVCaptureDevice.FlashMode.off 28 | var photoCaptureCompletionBlock: ((UIImage?, Error?) -> Void)? 29 | } 30 | 31 | extension CameraController { 32 | func prepare(completionHandler: @escaping (Error?) -> Void) { 33 | func createCaptureSession() { 34 | self.captureSession = AVCaptureSession() 35 | } 36 | 37 | func configureCaptureDevices() throws { 38 | let session = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: AVMediaType.video, position: .unspecified) 39 | let cameras = (session.devices.flatMap { $0 }) 40 | if !cameras.isEmpty { 41 | for camera in cameras { 42 | if camera.position == .front { 43 | self.frontCamera = camera 44 | 45 | } 46 | 47 | if camera.position == .back { 48 | self.rearCamera = camera 49 | 50 | try camera.lockForConfiguration() 51 | camera.focusMode = .continuousAutoFocus 52 | camera.unlockForConfiguration() 53 | } 54 | } 55 | } else { throw CameraControllerError.noCamerasAvailable } 56 | 57 | } 58 | 59 | func configureDeviceInputs() throws { 60 | guard let captureSession = self.captureSession else { throw CameraControllerError.captureSessionIsMissing } 61 | 62 | if let rearCamera = self.rearCamera { 63 | self.rearCameraInput = try AVCaptureDeviceInput(device: rearCamera) 64 | 65 | if captureSession.canAddInput(self.rearCameraInput!) { captureSession.addInput(self.rearCameraInput!) } 66 | 67 | self.currentCameraPosition = .rear 68 | } else if let frontCamera = self.frontCamera { 69 | self.frontCameraInput = try AVCaptureDeviceInput(device: frontCamera) 70 | 71 | if captureSession.canAddInput(self.frontCameraInput!) { 72 | captureSession.addInput(self.frontCameraInput!) 73 | } else { 74 | throw CameraControllerError.inputsAreInvalid 75 | } 76 | 77 | self.currentCameraPosition = .front 78 | } else { throw CameraControllerError.noCamerasAvailable } 79 | } 80 | 81 | func configurePhotoOutput() throws { 82 | guard let captureSession = self.captureSession else { throw CameraControllerError.captureSessionIsMissing } 83 | 84 | self.photoOutput = AVCapturePhotoOutput() 85 | self.photoOutput!.setPreparedPhotoSettingsArray([AVCapturePhotoSettings(format: [AVVideoCodecKey : AVVideoCodecJPEG])], completionHandler: nil) 86 | 87 | if captureSession.canAddOutput(self.photoOutput!) { captureSession.addOutput(self.photoOutput!) } 88 | captureSession.startRunning() 89 | } 90 | 91 | DispatchQueue(label: "prepare").async { 92 | do { 93 | createCaptureSession() 94 | try configureCaptureDevices() 95 | try configureDeviceInputs() 96 | try configurePhotoOutput() 97 | } catch { 98 | DispatchQueue.main.async { 99 | completionHandler(error) 100 | } 101 | 102 | return 103 | } 104 | 105 | DispatchQueue.main.async { 106 | completionHandler(nil) 107 | } 108 | } 109 | } 110 | 111 | func displayPreview(on view: UIView, darkLayerView: UIView) throws { 112 | guard let captureSession = self.captureSession, captureSession.isRunning else { throw CameraControllerError.captureSessionIsMissing } 113 | 114 | self.previewLayer = AVCaptureVideoPreviewLayer(session: captureSession) 115 | self.previewLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill 116 | self.previewLayer?.connection?.videoOrientation = .portrait 117 | 118 | view.layer.insertSublayer(self.previewLayer!, at: 0) 119 | self.previewLayer?.frame = view.frame 120 | view.insertSubview(darkLayerView, at: 1) 121 | } 122 | 123 | func switchCameras() throws { 124 | guard let currentCameraPosition = currentCameraPosition, let captureSession = self.captureSession, captureSession.isRunning else { throw CameraControllerError.captureSessionIsMissing } 125 | 126 | captureSession.beginConfiguration() 127 | 128 | func switchToFrontCamera() throws { 129 | guard let inputs = captureSession.inputs as? [AVCaptureInput], let rearCameraInput = self.rearCameraInput, inputs.contains(rearCameraInput), 130 | let frontCamera = self.frontCamera else { throw CameraControllerError.invalidOperation } 131 | 132 | self.frontCameraInput = try AVCaptureDeviceInput(device: frontCamera) 133 | 134 | captureSession.removeInput(rearCameraInput) 135 | 136 | if captureSession.canAddInput(self.frontCameraInput!) { 137 | captureSession.addInput(self.frontCameraInput!) 138 | 139 | self.currentCameraPosition = .front 140 | } else { 141 | throw CameraControllerError.invalidOperation 142 | } 143 | } 144 | 145 | func switchToRearCamera() throws { 146 | guard let inputs = captureSession.inputs as? [AVCaptureInput], let frontCameraInput = self.frontCameraInput, inputs.contains(frontCameraInput), 147 | let rearCamera = self.rearCamera else { throw CameraControllerError.invalidOperation } 148 | 149 | self.rearCameraInput = try AVCaptureDeviceInput(device: rearCamera) 150 | 151 | captureSession.removeInput(frontCameraInput) 152 | 153 | if captureSession.canAddInput(self.rearCameraInput!) { 154 | captureSession.addInput(self.rearCameraInput!) 155 | 156 | self.currentCameraPosition = .rear 157 | } else { 158 | throw CameraControllerError.invalidOperation 159 | } 160 | } 161 | 162 | switch currentCameraPosition { 163 | case .front: 164 | try switchToRearCamera() 165 | 166 | case .rear: 167 | try switchToFrontCamera() 168 | } 169 | 170 | captureSession.commitConfiguration() 171 | } 172 | 173 | func captureImage(completion: @escaping (UIImage?, Error?) -> Void) { 174 | guard let captureSession = captureSession, captureSession.isRunning else { completion(nil, CameraControllerError.captureSessionIsMissing); return } 175 | 176 | let settings = AVCapturePhotoSettings() 177 | settings.flashMode = self.flashMode 178 | 179 | self.photoOutput?.capturePhoto(with: settings, delegate: self) 180 | self.photoCaptureCompletionBlock = completion 181 | } 182 | 183 | } 184 | 185 | extension CameraController: AVCapturePhotoCaptureDelegate { 186 | public func photoOutput(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingPhoto photoSampleBuffer: CMSampleBuffer?, previewPhoto previewPhotoSampleBuffer: CMSampleBuffer?, 187 | resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Swift.Error?) { 188 | if let error = error { 189 | self.photoCaptureCompletionBlock?(nil, error) } else if let buffer = photoSampleBuffer, let data = AVCapturePhotoOutput.jpegPhotoDataRepresentation(forJPEGSampleBuffer: buffer, previewPhotoSampleBuffer: nil), 190 | let image = UIImage(data: data) { 191 | 192 | self.photoCaptureCompletionBlock?(image, nil) 193 | } else { 194 | self.photoCaptureCompletionBlock?(nil, CameraControllerError.unknown) 195 | } 196 | } 197 | } 198 | 199 | extension CameraController { 200 | enum CameraControllerError: Swift.Error { 201 | case captureSessionAlreadyRunning 202 | case captureSessionIsMissing 203 | case inputsAreInvalid 204 | case invalidOperation 205 | case noCamerasAvailable 206 | case unknown 207 | } 208 | 209 | public enum CameraPosition { 210 | case front 211 | case rear 212 | } 213 | } 214 | -------------------------------------------------------------------------------- /Phimpme/Storyboards/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 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Phimpme/Supporting Files/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Phimpme-iOS 4 | // 5 | // Created by JOGENDRA on 14/03/18. 6 | // Copyright © 2018 Jogendra Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 17 | 18 | application.statusBarStyle = .lightContent 19 | let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView 20 | if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) { 21 | statusBar.backgroundColor = UIColor(named: "AppThemeColor") 22 | } 23 | 24 | return true 25 | } 26 | 27 | func applicationWillResignActive(_ application: UIApplication) { 28 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 29 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 30 | } 31 | 32 | func applicationDidEnterBackground(_ application: UIApplication) { 33 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 34 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 35 | } 36 | 37 | func applicationWillEnterForeground(_ application: UIApplication) { 38 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 39 | } 40 | 41 | func applicationDidBecomeActive(_ application: UIApplication) { 42 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 43 | } 44 | 45 | func applicationWillTerminate(_ application: UIApplication) { 46 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /Phimpme/Supporting Files/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Phimpme 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UIViewControllerBasedStatusBarAppearance 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'Phimpme' 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 Phimpme 9 | pod 'NMAnimatedTabBarItem' 10 | 11 | end 12 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - NMAnimatedTabBarItem (0.1.1) 3 | 4 | DEPENDENCIES: 5 | - NMAnimatedTabBarItem 6 | 7 | SPEC CHECKSUMS: 8 | NMAnimatedTabBarItem: 257784eba1c60cae218634cef285babb29acb124 9 | 10 | PODFILE CHECKSUM: ff749ed99d8dd5c21bd041980fb1150164cd94a0 11 | 12 | COCOAPODS: 1.4.0 13 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - NMAnimatedTabBarItem (0.1.1) 3 | 4 | DEPENDENCIES: 5 | - NMAnimatedTabBarItem 6 | 7 | SPEC CHECKSUMS: 8 | NMAnimatedTabBarItem: 257784eba1c60cae218634cef285babb29acb124 9 | 10 | PODFILE CHECKSUM: ff749ed99d8dd5c21bd041980fb1150164cd94a0 11 | 12 | COCOAPODS: 1.4.0 13 | -------------------------------------------------------------------------------- /Pods/NMAnimatedTabBarItem/Classes/NMAnimatedTabBarItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NMAnimatedTabBarItem.swift 3 | // NMAnimatedTabBarItem 4 | // 5 | // Created by Balu Naik on 3/20/18. 6 | // 7 | // Permission is hereby granted, free of charge, to any person obtaining a copy 8 | // of this software and associated documentation files (the "Software"), to deal 9 | // in the Software without restriction, including without limitation the rights 10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | // copies of the Software, and to permit persons to whom the Software is 12 | // furnished to do so, subject to the following conditions: 13 | // 14 | // The above copyright notice and this permission notice shall be included in 15 | // all copies or substantial portions of the Software. 16 | // 17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 23 | // THE SOFTWARE. 24 | 25 | import UIKit 26 | 27 | @objc open class NMAnimateTabBarItem: NSObject { 28 | 29 | /// Options for animating. Default transitionFlipFromRight 30 | open var transitionOptions: UIViewAnimationOptions = UIViewAnimationOptions.transitionFlipFromRight 31 | 32 | /// The duration of the animation. Default 0.5 33 | open var duration: CGFloat = 0.5 34 | 35 | /// Animation direction (left, right). 36 | open var direction: NMRotationDirection? 37 | 38 | /// Frame Animation array list 39 | @nonobjc open var animationImages: Array = Array() 40 | 41 | // MARK: NMAnimationKey constants 42 | 43 | struct NMAnimationKeys { 44 | static let Scale = "transform.scale" 45 | static let Rotation = "transform.rotation" 46 | static let KeyFrame = "contents" 47 | } 48 | 49 | @objc public func animateTabBarItem(_ tabBar: UITabBar, _ tabIndex: Int, _ animationType: NMAnimationtype) { 50 | if let selectedItemImage: UIImageView = tabBar.subviews[tabIndex+1].subviews.first as? UIImageView { 51 | switch animationType { 52 | case NMAnimationtype.Bounce: 53 | self.playBounceAnimation(selectedItemImage) 54 | case NMAnimationtype.Rotation: 55 | self.playRotationAnimation(selectedItemImage) 56 | case NMAnimationtype.Transition: 57 | self.playTransitionAnimations(selectedItemImage) 58 | case NMAnimationtype.Frame: 59 | self.playFrameAnimation(selectedItemImage) 60 | default: 61 | break 62 | } 63 | } else { 64 | fatalError("tabbar item image not set") 65 | } 66 | } 67 | 68 | @objc public func createImagesArray(_ imageNames: Array) { 69 | for name: String in imageNames { 70 | if let image = UIImage(named: name)?.cgImage { 71 | animationImages.append(image) 72 | } 73 | } 74 | } 75 | 76 | // MARK: - Private API 77 | 78 | fileprivate func playTransitionAnimations(_ icon: UIImageView) { 79 | UIView.transition(with: icon, duration: TimeInterval(duration), options: transitionOptions, animations: { 80 | }, completion: { _ in 81 | }) 82 | } 83 | 84 | fileprivate func playRotationAnimation(_ icon: UIImageView) { 85 | let rotate = CABasicAnimation(keyPath: NMAnimationKeys.Rotation) 86 | rotate.fromValue = 0.0 87 | var toValue = CGFloat.pi * 2 88 | if direction != nil && direction == NMRotationDirection.left { 89 | toValue = toValue * -1.0 90 | } 91 | rotate.toValue = toValue 92 | rotate.duration = TimeInterval(duration) 93 | icon.layer.add(rotate, forKey: nil) 94 | } 95 | 96 | fileprivate func playBounceAnimation(_ icon: UIImageView) { 97 | let bounce = CAKeyframeAnimation(keyPath: NMAnimationKeys.Scale) 98 | bounce.values = [1.0, 1.4, 0.9, 1.15, 0.95, 1.02, 1.0] 99 | bounce.duration = TimeInterval(duration) 100 | bounce.calculationMode = kCAAnimationCubic 101 | icon.layer.add(bounce, forKey: nil) 102 | } 103 | 104 | fileprivate func playFrameAnimation(_ icon: UIImageView) { 105 | if self.animationImages.count == 0 { 106 | fatalError("images list is empty") 107 | } 108 | let frame = CAKeyframeAnimation(keyPath: NMAnimationKeys.KeyFrame) 109 | frame.calculationMode = kCAAnimationDiscrete 110 | frame.duration = TimeInterval(duration) 111 | frame.values = self.animationImages 112 | frame.repeatCount = 1 113 | frame.isRemovedOnCompletion = false 114 | frame.fillMode = kCAFillModeForwards 115 | icon.layer.add(frame, forKey: nil) 116 | } 117 | 118 | } 119 | -------------------------------------------------------------------------------- /Pods/NMAnimatedTabBarItem/Classes/NMAnimationtype.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NMAnimationtype.swift 3 | // NMAnimatedTabBarItem 4 | // 5 | // Created by Balu Naik on 3/20/18. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: NMAnimation type constants 11 | 12 | @objc public enum NMAnimationtype: Int { 13 | case None 14 | case Bounce 15 | case Rotation 16 | case Transition 17 | case Frame 18 | } 19 | -------------------------------------------------------------------------------- /Pods/NMAnimatedTabBarItem/Classes/NMRotationDirection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NMRotationDirection.swift 3 | // NMAnimatedTabBarItem 4 | // 5 | // Created by Balu Naik on 3/20/18. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: NMRotation direction Left/Right 11 | 12 | @objc public enum NMRotationDirection: Int { 13 | case left 14 | case right 15 | } 16 | -------------------------------------------------------------------------------- /Pods/NMAnimatedTabBarItem/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Namshi 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 | -------------------------------------------------------------------------------- /Pods/NMAnimatedTabBarItem/README.md: -------------------------------------------------------------------------------- 1 | 2 | # NMAnimatedTabBarItem 3 | 4 | NMAnimatedTabBarItem is a Swift based UI module library for adding animation to iOS tabbar items and icons. iOS library made by [@Namshi Mobile Team](https://github.com/namshi). 5 | 6 | ![Demo](https://github.com/namshi/NMAnimatedTabBarItem/blob/master/Example/NMAnimatedTabBarItem/Images/NMAnimatedTabBarItem.gif) 7 | 8 | ## Requirements 9 | 10 | - iOS 9.0+ 11 | - xCode 9 12 | - Swift 3.2 13 | 14 | ## Installation 15 | 16 | Just add the NMAnimatedTabBarItem folder to your project. or use [CocoaPods](https://cocoapods.org/pods/NMAnimatedTabBarItem) with Podfile: 17 | ``` ruby 18 | pod 'NMAnimatedTabBarItem' 19 | ``` 20 | 21 | ## Usage 22 | 23 | 1. Import NMAnimateTabBarItem framework. 24 | ``` 25 | import NMAnimatedTabBarItem 26 | ``` 27 | 2. Create an instance of type NMAnimateTabBarItem. 28 | ``` 29 | var animatedTabBar = NMAnimateTabBarItem() 30 | ``` 31 | 32 | 2. Adopt UITabBarControllerDelegate into your class. 33 | ``` 34 | class ViewController: UITabBarController , UITabBarControllerDelegate { 35 | //do Your stuff 36 | } 37 | ``` 38 | 3. Implement UITabBarControllerDelegate method. 39 | ``` 40 | func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 41 | 42 | return true 43 | } 44 | ``` 45 | 46 | 4. Find the index of selected tab and call animateTabBarItem. 47 | ``` 48 | let indexOfTab = tabBarController.viewControllers?.index(of:viewController) 49 | animatedTabBar.animateTabBarItem(self.tabBar, indexOfTab!, NMAnimationtype.Bounce) 50 | ``` 51 | 4. Make sure UITabBar item images are added. 52 | 53 | 54 | ## Included Animations 55 | * Bounce 56 | * Rotation 57 | * Transition 58 | * Frame 59 | 60 | ## Customized Properties 61 | * Chenging animation duration. 62 | ``` 63 | animatedTabBar.duration = 0.2 64 | ``` 65 | * Providing transition Options. 66 | ``` 67 | animatedTabBar.transitionOptions = UIViewAnimationOptions.transitionFlipFromBottom 68 | ``` 69 | * Chenging rotation direction 70 | ``` 71 | animatedTabBar.direction = NMRotationDirection.right 72 | ``` 73 | * Passing image names for frame animation 74 | ``` 75 | animationType = NMAnimationtype.Frame 76 | var imagesArray :[String] = [] 77 | for index in 0...35 { 78 | imagesArray.append("frame_\(index)") 79 | } 80 | animatedTabBar.createImagesArray(imagesArray) 81 | ``` 82 | * Passing images for frame animation 83 | ``` 84 | animationType = NMAnimationtype.Frame 85 | imagesList.append((UIImage(named: "image.png")?.cgImage)!) 86 | imagesList.append((UIImage(named: "image2.png")?.cgImage)!) 87 | imagesList.append((UIImage(named: "image3.png")?.cgImage)!) 88 | animatedTabBar.animationImages = imagesList 89 | ``` 90 | 91 | ### Manual 92 | You can download the latest files from our [Releases](https://github.com/namshi/NMAnimatedTabBarItem/releases) page. After doing so, copy the Swift file in the Sources folder to your project. 93 | 94 | ### Demo 95 | Check out the Example project. 96 | 97 | ## Copyrights 98 | This library has created by inspiration of [RAMAnimatedTabBarController](https://github.com/Ramotion/animated-tab-bar). 99 | 100 | All right reserved. Namshi Team 2018. 101 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4B23C990338C5B925124E09C2B15B1F7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 11 | 5342BC92B6A88F71E4023DE64A4B0A8C /* NMAnimatedTabBarItem-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B934C3E1F1395FD926955B0E2D02B32 /* NMAnimatedTabBarItem-dummy.m */; }; 12 | 6BB095868EBFC451821F476523801E4A /* NMAnimatedTabBarItem-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EF186CE13F90E19FC3C6204D6E32F37E /* NMAnimatedTabBarItem-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | 8C15164BB9CFEC389542C076656748DC /* Pods-Phimpme-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F711D43C3F731CF6CC8D110CD4302354 /* Pods-Phimpme-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 14 | 9BA4952B4BA734F1B4F04B0501AB6B7E /* Pods-Phimpme-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7847065E67A6BD831E1C281A850403A7 /* Pods-Phimpme-dummy.m */; }; 15 | A67E0CDA20779A77B100F93AAEC29C4C /* NMRotationDirection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1E7D9684D82AA7A59DCC81D5F80CE25 /* NMRotationDirection.swift */; }; 16 | AC2E5263EC02813F31BFA945A63DD103 /* NMAnimatedTabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA65E89BBAA70DDF4A34D57BDC6C4024 /* NMAnimatedTabBarItem.swift */; }; 17 | BE8498EE3C65F1CAA2F1889FC85C8602 /* NMAnimationtype.swift in Sources */ = {isa = PBXBuildFile; fileRef = A279D85C3ADE17DEADE42B84AB0BF354 /* NMAnimationtype.swift */; }; 18 | EE056D3AE8FBD4F4B06AF8B16E7C8585 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | E7CE1707FC2976CDC8428B10AEC23F34 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = 2A6F93515B92753961D108C0A2567480; 27 | remoteInfo = NMAnimatedTabBarItem; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | 03B70C5948E54113FCFF25D1E80CA864 /* Pods-Phimpme.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Phimpme.release.xcconfig"; sourceTree = ""; }; 33 | 0FC183CFDA8BE44AAF4F2FB175E7146B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 34 | 5C2C0D7988FFDACB78AB994D1B1A494B /* NMAnimatedTabBarItem.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = NMAnimatedTabBarItem.modulemap; sourceTree = ""; }; 35 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 36 | 6CA9DD6875DB86106602D1398D00C76E /* Pods-Phimpme.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Phimpme.modulemap"; sourceTree = ""; }; 37 | 6DA7B6D7DC3AE298DCBAA8A603128F03 /* Pods-Phimpme-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Phimpme-resources.sh"; sourceTree = ""; }; 38 | 700D3198318B491F218048B17F469F77 /* Pods-Phimpme.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Phimpme.debug.xcconfig"; sourceTree = ""; }; 39 | 73D277BBE7B4C7CB2CFED2A5E42CC39D /* Pods-Phimpme-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Phimpme-frameworks.sh"; sourceTree = ""; }; 40 | 7847065E67A6BD831E1C281A850403A7 /* Pods-Phimpme-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Phimpme-dummy.m"; sourceTree = ""; }; 41 | 7B934C3E1F1395FD926955B0E2D02B32 /* NMAnimatedTabBarItem-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NMAnimatedTabBarItem-dummy.m"; sourceTree = ""; }; 42 | 8C9FA06A0BEEEF646FE0AE705631C46D /* NMAnimatedTabBarItem.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = NMAnimatedTabBarItem.xcconfig; sourceTree = ""; }; 43 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 44 | A279D85C3ADE17DEADE42B84AB0BF354 /* NMAnimationtype.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMAnimationtype.swift; path = Classes/NMAnimationtype.swift; sourceTree = ""; }; 45 | A4315E314AB4A5C94EF920A1BC0BE290 /* Pods_Phimpme.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Phimpme.framework; path = "Pods-Phimpme.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 46 | AA7BA541A4B8A6D027685C24CB629619 /* NMAnimatedTabBarItem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = NMAnimatedTabBarItem.framework; path = NMAnimatedTabBarItem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | CE4E3A9A2A8E610BD39F303F53D9CA5C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 48 | D48A4A485DBBA342F9D6D637853E19A5 /* NMAnimatedTabBarItem-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NMAnimatedTabBarItem-prefix.pch"; sourceTree = ""; }; 49 | E1E7D9684D82AA7A59DCC81D5F80CE25 /* NMRotationDirection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMRotationDirection.swift; path = Classes/NMRotationDirection.swift; sourceTree = ""; }; 50 | E9B63FBB5315CD1769D0DC1DAD613220 /* Pods-Phimpme-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Phimpme-acknowledgements.plist"; sourceTree = ""; }; 51 | EA65E89BBAA70DDF4A34D57BDC6C4024 /* NMAnimatedTabBarItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NMAnimatedTabBarItem.swift; path = Classes/NMAnimatedTabBarItem.swift; sourceTree = ""; }; 52 | EF186CE13F90E19FC3C6204D6E32F37E /* NMAnimatedTabBarItem-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NMAnimatedTabBarItem-umbrella.h"; sourceTree = ""; }; 53 | F711D43C3F731CF6CC8D110CD4302354 /* Pods-Phimpme-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Phimpme-umbrella.h"; sourceTree = ""; }; 54 | F881F51FE3B89A71483648E8C98441E6 /* Pods-Phimpme-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Phimpme-acknowledgements.markdown"; sourceTree = ""; }; 55 | /* End PBXFileReference section */ 56 | 57 | /* Begin PBXFrameworksBuildPhase section */ 58 | 5D6918B7DA6DCE636FBE90FB5A7729C4 /* Frameworks */ = { 59 | isa = PBXFrameworksBuildPhase; 60 | buildActionMask = 2147483647; 61 | files = ( 62 | EE056D3AE8FBD4F4B06AF8B16E7C8585 /* Foundation.framework in Frameworks */, 63 | ); 64 | runOnlyForDeploymentPostprocessing = 0; 65 | }; 66 | 6F8AB218C1F55B854338AEDCCF19F1D3 /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | 4B23C990338C5B925124E09C2B15B1F7 /* Foundation.framework in Frameworks */, 71 | ); 72 | runOnlyForDeploymentPostprocessing = 0; 73 | }; 74 | /* End PBXFrameworksBuildPhase section */ 75 | 76 | /* Begin PBXGroup section */ 77 | 029DD8DBC776E2C61AAE7A2974EE39F7 /* Products */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | AA7BA541A4B8A6D027685C24CB629619 /* NMAnimatedTabBarItem.framework */, 81 | A4315E314AB4A5C94EF920A1BC0BE290 /* Pods_Phimpme.framework */, 82 | ); 83 | name = Products; 84 | sourceTree = ""; 85 | }; 86 | 342DC6EECF4F7A6D57897490B72FC063 /* Targets Support Files */ = { 87 | isa = PBXGroup; 88 | children = ( 89 | E48624DF786FDBFD996365AE867EDFEE /* Pods-Phimpme */, 90 | ); 91 | name = "Targets Support Files"; 92 | sourceTree = ""; 93 | }; 94 | 3C2BD4012DC2F89C75A95DF33DE0723A /* Pods */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | E30AD91B905F4F582A4C224E50C0F8D1 /* NMAnimatedTabBarItem */, 98 | ); 99 | name = Pods; 100 | sourceTree = ""; 101 | }; 102 | 7DB346D0F39D3F0E887471402A8071AB = { 103 | isa = PBXGroup; 104 | children = ( 105 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 106 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 107 | 3C2BD4012DC2F89C75A95DF33DE0723A /* Pods */, 108 | 029DD8DBC776E2C61AAE7A2974EE39F7 /* Products */, 109 | 342DC6EECF4F7A6D57897490B72FC063 /* Targets Support Files */, 110 | ); 111 | sourceTree = ""; 112 | }; 113 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 114 | isa = PBXGroup; 115 | children = ( 116 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 117 | ); 118 | name = Frameworks; 119 | sourceTree = ""; 120 | }; 121 | CD962B38BECE72262C24CDD502F5FE6C /* Support Files */ = { 122 | isa = PBXGroup; 123 | children = ( 124 | CE4E3A9A2A8E610BD39F303F53D9CA5C /* Info.plist */, 125 | 5C2C0D7988FFDACB78AB994D1B1A494B /* NMAnimatedTabBarItem.modulemap */, 126 | 8C9FA06A0BEEEF646FE0AE705631C46D /* NMAnimatedTabBarItem.xcconfig */, 127 | 7B934C3E1F1395FD926955B0E2D02B32 /* NMAnimatedTabBarItem-dummy.m */, 128 | D48A4A485DBBA342F9D6D637853E19A5 /* NMAnimatedTabBarItem-prefix.pch */, 129 | EF186CE13F90E19FC3C6204D6E32F37E /* NMAnimatedTabBarItem-umbrella.h */, 130 | ); 131 | name = "Support Files"; 132 | path = "../Target Support Files/NMAnimatedTabBarItem"; 133 | sourceTree = ""; 134 | }; 135 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 139 | ); 140 | name = iOS; 141 | sourceTree = ""; 142 | }; 143 | E30AD91B905F4F582A4C224E50C0F8D1 /* NMAnimatedTabBarItem */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | EA65E89BBAA70DDF4A34D57BDC6C4024 /* NMAnimatedTabBarItem.swift */, 147 | A279D85C3ADE17DEADE42B84AB0BF354 /* NMAnimationtype.swift */, 148 | E1E7D9684D82AA7A59DCC81D5F80CE25 /* NMRotationDirection.swift */, 149 | CD962B38BECE72262C24CDD502F5FE6C /* Support Files */, 150 | ); 151 | name = NMAnimatedTabBarItem; 152 | path = NMAnimatedTabBarItem; 153 | sourceTree = ""; 154 | }; 155 | E48624DF786FDBFD996365AE867EDFEE /* Pods-Phimpme */ = { 156 | isa = PBXGroup; 157 | children = ( 158 | 0FC183CFDA8BE44AAF4F2FB175E7146B /* Info.plist */, 159 | 6CA9DD6875DB86106602D1398D00C76E /* Pods-Phimpme.modulemap */, 160 | F881F51FE3B89A71483648E8C98441E6 /* Pods-Phimpme-acknowledgements.markdown */, 161 | E9B63FBB5315CD1769D0DC1DAD613220 /* Pods-Phimpme-acknowledgements.plist */, 162 | 7847065E67A6BD831E1C281A850403A7 /* Pods-Phimpme-dummy.m */, 163 | 73D277BBE7B4C7CB2CFED2A5E42CC39D /* Pods-Phimpme-frameworks.sh */, 164 | 6DA7B6D7DC3AE298DCBAA8A603128F03 /* Pods-Phimpme-resources.sh */, 165 | F711D43C3F731CF6CC8D110CD4302354 /* Pods-Phimpme-umbrella.h */, 166 | 700D3198318B491F218048B17F469F77 /* Pods-Phimpme.debug.xcconfig */, 167 | 03B70C5948E54113FCFF25D1E80CA864 /* Pods-Phimpme.release.xcconfig */, 168 | ); 169 | name = "Pods-Phimpme"; 170 | path = "Target Support Files/Pods-Phimpme"; 171 | sourceTree = ""; 172 | }; 173 | /* End PBXGroup section */ 174 | 175 | /* Begin PBXHeadersBuildPhase section */ 176 | 5141BDCD6F40917E7A98FED4BB014C3E /* Headers */ = { 177 | isa = PBXHeadersBuildPhase; 178 | buildActionMask = 2147483647; 179 | files = ( 180 | 6BB095868EBFC451821F476523801E4A /* NMAnimatedTabBarItem-umbrella.h in Headers */, 181 | ); 182 | runOnlyForDeploymentPostprocessing = 0; 183 | }; 184 | 6318FE6F6FA1A4028DF10104D5C769AB /* Headers */ = { 185 | isa = PBXHeadersBuildPhase; 186 | buildActionMask = 2147483647; 187 | files = ( 188 | 8C15164BB9CFEC389542C076656748DC /* Pods-Phimpme-umbrella.h in Headers */, 189 | ); 190 | runOnlyForDeploymentPostprocessing = 0; 191 | }; 192 | /* End PBXHeadersBuildPhase section */ 193 | 194 | /* Begin PBXNativeTarget section */ 195 | 07F2BC662237146488A7AFB0B8848EF4 /* Pods-Phimpme */ = { 196 | isa = PBXNativeTarget; 197 | buildConfigurationList = 72C1135514770B9DB8CCF5CA93F14F8C /* Build configuration list for PBXNativeTarget "Pods-Phimpme" */; 198 | buildPhases = ( 199 | DC24B239094106848C3A4A7C9DB50D0A /* Sources */, 200 | 6F8AB218C1F55B854338AEDCCF19F1D3 /* Frameworks */, 201 | 6318FE6F6FA1A4028DF10104D5C769AB /* Headers */, 202 | ); 203 | buildRules = ( 204 | ); 205 | dependencies = ( 206 | 355F6065A41A981731FDD9EBCFD685BA /* PBXTargetDependency */, 207 | ); 208 | name = "Pods-Phimpme"; 209 | productName = "Pods-Phimpme"; 210 | productReference = A4315E314AB4A5C94EF920A1BC0BE290 /* Pods_Phimpme.framework */; 211 | productType = "com.apple.product-type.framework"; 212 | }; 213 | 2A6F93515B92753961D108C0A2567480 /* NMAnimatedTabBarItem */ = { 214 | isa = PBXNativeTarget; 215 | buildConfigurationList = 28836C90A86BCF21725CB6BCAB65E867 /* Build configuration list for PBXNativeTarget "NMAnimatedTabBarItem" */; 216 | buildPhases = ( 217 | D59EBF0EB771C0380DD8FDDDF63313D0 /* Sources */, 218 | 5D6918B7DA6DCE636FBE90FB5A7729C4 /* Frameworks */, 219 | 5141BDCD6F40917E7A98FED4BB014C3E /* Headers */, 220 | ); 221 | buildRules = ( 222 | ); 223 | dependencies = ( 224 | ); 225 | name = NMAnimatedTabBarItem; 226 | productName = NMAnimatedTabBarItem; 227 | productReference = AA7BA541A4B8A6D027685C24CB629619 /* NMAnimatedTabBarItem.framework */; 228 | productType = "com.apple.product-type.framework"; 229 | }; 230 | /* End PBXNativeTarget section */ 231 | 232 | /* Begin PBXProject section */ 233 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 234 | isa = PBXProject; 235 | attributes = { 236 | LastSwiftUpdateCheck = 0930; 237 | LastUpgradeCheck = 0930; 238 | }; 239 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 240 | compatibilityVersion = "Xcode 3.2"; 241 | developmentRegion = English; 242 | hasScannedForEncodings = 0; 243 | knownRegions = ( 244 | en, 245 | ); 246 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 247 | productRefGroup = 029DD8DBC776E2C61AAE7A2974EE39F7 /* Products */; 248 | projectDirPath = ""; 249 | projectRoot = ""; 250 | targets = ( 251 | 2A6F93515B92753961D108C0A2567480 /* NMAnimatedTabBarItem */, 252 | 07F2BC662237146488A7AFB0B8848EF4 /* Pods-Phimpme */, 253 | ); 254 | }; 255 | /* End PBXProject section */ 256 | 257 | /* Begin PBXSourcesBuildPhase section */ 258 | D59EBF0EB771C0380DD8FDDDF63313D0 /* Sources */ = { 259 | isa = PBXSourcesBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | 5342BC92B6A88F71E4023DE64A4B0A8C /* NMAnimatedTabBarItem-dummy.m in Sources */, 263 | AC2E5263EC02813F31BFA945A63DD103 /* NMAnimatedTabBarItem.swift in Sources */, 264 | BE8498EE3C65F1CAA2F1889FC85C8602 /* NMAnimationtype.swift in Sources */, 265 | A67E0CDA20779A77B100F93AAEC29C4C /* NMRotationDirection.swift in Sources */, 266 | ); 267 | runOnlyForDeploymentPostprocessing = 0; 268 | }; 269 | DC24B239094106848C3A4A7C9DB50D0A /* Sources */ = { 270 | isa = PBXSourcesBuildPhase; 271 | buildActionMask = 2147483647; 272 | files = ( 273 | 9BA4952B4BA734F1B4F04B0501AB6B7E /* Pods-Phimpme-dummy.m in Sources */, 274 | ); 275 | runOnlyForDeploymentPostprocessing = 0; 276 | }; 277 | /* End PBXSourcesBuildPhase section */ 278 | 279 | /* Begin PBXTargetDependency section */ 280 | 355F6065A41A981731FDD9EBCFD685BA /* PBXTargetDependency */ = { 281 | isa = PBXTargetDependency; 282 | name = NMAnimatedTabBarItem; 283 | target = 2A6F93515B92753961D108C0A2567480 /* NMAnimatedTabBarItem */; 284 | targetProxy = E7CE1707FC2976CDC8428B10AEC23F34 /* PBXContainerItemProxy */; 285 | }; 286 | /* End PBXTargetDependency section */ 287 | 288 | /* Begin XCBuildConfiguration section */ 289 | 12DF8A6A15251BD8A7AB97C6D180FB27 /* Debug */ = { 290 | isa = XCBuildConfiguration; 291 | baseConfigurationReference = 700D3198318B491F218048B17F469F77 /* Pods-Phimpme.debug.xcconfig */; 292 | buildSettings = { 293 | CLANG_ENABLE_OBJC_WEAK = NO; 294 | CODE_SIGN_IDENTITY = ""; 295 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 296 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 297 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 298 | CURRENT_PROJECT_VERSION = 1; 299 | DEFINES_MODULE = YES; 300 | DYLIB_COMPATIBILITY_VERSION = 1; 301 | DYLIB_CURRENT_VERSION = 1; 302 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 303 | INFOPLIST_FILE = "Target Support Files/Pods-Phimpme/Info.plist"; 304 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 305 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 306 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 307 | MACH_O_TYPE = staticlib; 308 | MODULEMAP_FILE = "Target Support Files/Pods-Phimpme/Pods-Phimpme.modulemap"; 309 | OTHER_LDFLAGS = ""; 310 | OTHER_LIBTOOLFLAGS = ""; 311 | PODS_ROOT = "$(SRCROOT)"; 312 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 313 | PRODUCT_NAME = Pods_Phimpme; 314 | SDKROOT = iphoneos; 315 | SKIP_INSTALL = YES; 316 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 317 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 318 | TARGETED_DEVICE_FAMILY = "1,2"; 319 | VERSIONING_SYSTEM = "apple-generic"; 320 | VERSION_INFO_PREFIX = ""; 321 | }; 322 | name = Debug; 323 | }; 324 | 1B92A449453B481B6BBE4B975247FC48 /* Release */ = { 325 | isa = XCBuildConfiguration; 326 | baseConfigurationReference = 03B70C5948E54113FCFF25D1E80CA864 /* Pods-Phimpme.release.xcconfig */; 327 | buildSettings = { 328 | CLANG_ENABLE_OBJC_WEAK = NO; 329 | CODE_SIGN_IDENTITY = ""; 330 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 331 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 332 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 333 | CURRENT_PROJECT_VERSION = 1; 334 | DEFINES_MODULE = YES; 335 | DYLIB_COMPATIBILITY_VERSION = 1; 336 | DYLIB_CURRENT_VERSION = 1; 337 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 338 | INFOPLIST_FILE = "Target Support Files/Pods-Phimpme/Info.plist"; 339 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 340 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 341 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 342 | MACH_O_TYPE = staticlib; 343 | MODULEMAP_FILE = "Target Support Files/Pods-Phimpme/Pods-Phimpme.modulemap"; 344 | OTHER_LDFLAGS = ""; 345 | OTHER_LIBTOOLFLAGS = ""; 346 | PODS_ROOT = "$(SRCROOT)"; 347 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 348 | PRODUCT_NAME = Pods_Phimpme; 349 | SDKROOT = iphoneos; 350 | SKIP_INSTALL = YES; 351 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 352 | TARGETED_DEVICE_FAMILY = "1,2"; 353 | VALIDATE_PRODUCT = YES; 354 | VERSIONING_SYSTEM = "apple-generic"; 355 | VERSION_INFO_PREFIX = ""; 356 | }; 357 | name = Release; 358 | }; 359 | 323A24856F1A4871A780301AF5C02A2A /* Debug */ = { 360 | isa = XCBuildConfiguration; 361 | buildSettings = { 362 | ALWAYS_SEARCH_USER_PATHS = NO; 363 | CLANG_ANALYZER_NONNULL = YES; 364 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 365 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 366 | CLANG_CXX_LIBRARY = "libc++"; 367 | CLANG_ENABLE_MODULES = YES; 368 | CLANG_ENABLE_OBJC_ARC = YES; 369 | CLANG_ENABLE_OBJC_WEAK = YES; 370 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 371 | CLANG_WARN_BOOL_CONVERSION = YES; 372 | CLANG_WARN_COMMA = YES; 373 | CLANG_WARN_CONSTANT_CONVERSION = YES; 374 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 375 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 376 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 377 | CLANG_WARN_EMPTY_BODY = YES; 378 | CLANG_WARN_ENUM_CONVERSION = YES; 379 | CLANG_WARN_INFINITE_RECURSION = YES; 380 | CLANG_WARN_INT_CONVERSION = YES; 381 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 382 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 383 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 384 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 385 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 386 | CLANG_WARN_STRICT_PROTOTYPES = YES; 387 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 388 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 389 | CLANG_WARN_UNREACHABLE_CODE = YES; 390 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 391 | CODE_SIGNING_REQUIRED = NO; 392 | COPY_PHASE_STRIP = NO; 393 | DEBUG_INFORMATION_FORMAT = dwarf; 394 | ENABLE_STRICT_OBJC_MSGSEND = YES; 395 | ENABLE_TESTABILITY = YES; 396 | GCC_C_LANGUAGE_STANDARD = gnu11; 397 | GCC_DYNAMIC_NO_PIC = NO; 398 | GCC_NO_COMMON_BLOCKS = YES; 399 | GCC_OPTIMIZATION_LEVEL = 0; 400 | GCC_PREPROCESSOR_DEFINITIONS = ( 401 | "POD_CONFIGURATION_DEBUG=1", 402 | "DEBUG=1", 403 | "$(inherited)", 404 | ); 405 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 406 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 407 | GCC_WARN_UNDECLARED_SELECTOR = YES; 408 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 409 | GCC_WARN_UNUSED_FUNCTION = YES; 410 | GCC_WARN_UNUSED_VARIABLE = YES; 411 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 412 | MTL_ENABLE_DEBUG_INFO = YES; 413 | ONLY_ACTIVE_ARCH = YES; 414 | PRODUCT_NAME = "$(TARGET_NAME)"; 415 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 416 | STRIP_INSTALLED_PRODUCT = NO; 417 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 418 | SYMROOT = "${SRCROOT}/../build"; 419 | }; 420 | name = Debug; 421 | }; 422 | CA33F186435244FD0FD5B7325332656C /* Release */ = { 423 | isa = XCBuildConfiguration; 424 | buildSettings = { 425 | ALWAYS_SEARCH_USER_PATHS = NO; 426 | CLANG_ANALYZER_NONNULL = YES; 427 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 428 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 429 | CLANG_CXX_LIBRARY = "libc++"; 430 | CLANG_ENABLE_MODULES = YES; 431 | CLANG_ENABLE_OBJC_ARC = YES; 432 | CLANG_ENABLE_OBJC_WEAK = YES; 433 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 434 | CLANG_WARN_BOOL_CONVERSION = YES; 435 | CLANG_WARN_COMMA = YES; 436 | CLANG_WARN_CONSTANT_CONVERSION = YES; 437 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 438 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 439 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 440 | CLANG_WARN_EMPTY_BODY = YES; 441 | CLANG_WARN_ENUM_CONVERSION = YES; 442 | CLANG_WARN_INFINITE_RECURSION = YES; 443 | CLANG_WARN_INT_CONVERSION = YES; 444 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 445 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 446 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 447 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 448 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 449 | CLANG_WARN_STRICT_PROTOTYPES = YES; 450 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 451 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 452 | CLANG_WARN_UNREACHABLE_CODE = YES; 453 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 454 | CODE_SIGNING_REQUIRED = NO; 455 | COPY_PHASE_STRIP = NO; 456 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 457 | ENABLE_NS_ASSERTIONS = NO; 458 | ENABLE_STRICT_OBJC_MSGSEND = YES; 459 | GCC_C_LANGUAGE_STANDARD = gnu11; 460 | GCC_NO_COMMON_BLOCKS = YES; 461 | GCC_PREPROCESSOR_DEFINITIONS = ( 462 | "POD_CONFIGURATION_RELEASE=1", 463 | "$(inherited)", 464 | ); 465 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 466 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 467 | GCC_WARN_UNDECLARED_SELECTOR = YES; 468 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 469 | GCC_WARN_UNUSED_FUNCTION = YES; 470 | GCC_WARN_UNUSED_VARIABLE = YES; 471 | IPHONEOS_DEPLOYMENT_TARGET = 11.2; 472 | MTL_ENABLE_DEBUG_INFO = NO; 473 | PRODUCT_NAME = "$(TARGET_NAME)"; 474 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 475 | STRIP_INSTALLED_PRODUCT = NO; 476 | SYMROOT = "${SRCROOT}/../build"; 477 | }; 478 | name = Release; 479 | }; 480 | E6401123866CCCC209E77D7E2068AE9B /* Debug */ = { 481 | isa = XCBuildConfiguration; 482 | baseConfigurationReference = 8C9FA06A0BEEEF646FE0AE705631C46D /* NMAnimatedTabBarItem.xcconfig */; 483 | buildSettings = { 484 | CODE_SIGN_IDENTITY = ""; 485 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 486 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 487 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 488 | CURRENT_PROJECT_VERSION = 1; 489 | DEFINES_MODULE = YES; 490 | DYLIB_COMPATIBILITY_VERSION = 1; 491 | DYLIB_CURRENT_VERSION = 1; 492 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 493 | GCC_PREFIX_HEADER = "Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem-prefix.pch"; 494 | INFOPLIST_FILE = "Target Support Files/NMAnimatedTabBarItem/Info.plist"; 495 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 496 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 497 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 498 | MODULEMAP_FILE = "Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem.modulemap"; 499 | PRODUCT_NAME = NMAnimatedTabBarItem; 500 | SDKROOT = iphoneos; 501 | SKIP_INSTALL = YES; 502 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 503 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 504 | SWIFT_VERSION = 3.2; 505 | TARGETED_DEVICE_FAMILY = "1,2"; 506 | VERSIONING_SYSTEM = "apple-generic"; 507 | VERSION_INFO_PREFIX = ""; 508 | }; 509 | name = Debug; 510 | }; 511 | FB01DEE3AB7D895BB5BCC4E1B1D17363 /* Release */ = { 512 | isa = XCBuildConfiguration; 513 | baseConfigurationReference = 8C9FA06A0BEEEF646FE0AE705631C46D /* NMAnimatedTabBarItem.xcconfig */; 514 | buildSettings = { 515 | CODE_SIGN_IDENTITY = ""; 516 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 517 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 518 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 519 | CURRENT_PROJECT_VERSION = 1; 520 | DEFINES_MODULE = YES; 521 | DYLIB_COMPATIBILITY_VERSION = 1; 522 | DYLIB_CURRENT_VERSION = 1; 523 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 524 | GCC_PREFIX_HEADER = "Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem-prefix.pch"; 525 | INFOPLIST_FILE = "Target Support Files/NMAnimatedTabBarItem/Info.plist"; 526 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 527 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 528 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 529 | MODULEMAP_FILE = "Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem.modulemap"; 530 | PRODUCT_NAME = NMAnimatedTabBarItem; 531 | SDKROOT = iphoneos; 532 | SKIP_INSTALL = YES; 533 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 534 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 535 | SWIFT_VERSION = 3.2; 536 | TARGETED_DEVICE_FAMILY = "1,2"; 537 | VALIDATE_PRODUCT = YES; 538 | VERSIONING_SYSTEM = "apple-generic"; 539 | VERSION_INFO_PREFIX = ""; 540 | }; 541 | name = Release; 542 | }; 543 | /* End XCBuildConfiguration section */ 544 | 545 | /* Begin XCConfigurationList section */ 546 | 28836C90A86BCF21725CB6BCAB65E867 /* Build configuration list for PBXNativeTarget "NMAnimatedTabBarItem" */ = { 547 | isa = XCConfigurationList; 548 | buildConfigurations = ( 549 | E6401123866CCCC209E77D7E2068AE9B /* Debug */, 550 | FB01DEE3AB7D895BB5BCC4E1B1D17363 /* Release */, 551 | ); 552 | defaultConfigurationIsVisible = 0; 553 | defaultConfigurationName = Release; 554 | }; 555 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 556 | isa = XCConfigurationList; 557 | buildConfigurations = ( 558 | 323A24856F1A4871A780301AF5C02A2A /* Debug */, 559 | CA33F186435244FD0FD5B7325332656C /* Release */, 560 | ); 561 | defaultConfigurationIsVisible = 0; 562 | defaultConfigurationName = Release; 563 | }; 564 | 72C1135514770B9DB8CCF5CA93F14F8C /* Build configuration list for PBXNativeTarget "Pods-Phimpme" */ = { 565 | isa = XCConfigurationList; 566 | buildConfigurations = ( 567 | 12DF8A6A15251BD8A7AB97C6D180FB27 /* Debug */, 568 | 1B92A449453B481B6BBE4B975247FC48 /* Release */, 569 | ); 570 | defaultConfigurationIsVisible = 0; 571 | defaultConfigurationName = Release; 572 | }; 573 | /* End XCConfigurationList section */ 574 | }; 575 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 576 | } 577 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/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 | 0.1.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_NMAnimatedTabBarItem : NSObject 3 | @end 4 | @implementation PodsDummy_NMAnimatedTabBarItem 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem-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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem-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 NMAnimatedTabBarItemVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char NMAnimatedTabBarItemVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem.modulemap: -------------------------------------------------------------------------------- 1 | framework module NMAnimatedTabBarItem { 2 | umbrella header "NMAnimatedTabBarItem-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/NMAnimatedTabBarItem/NMAnimatedTabBarItem.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/NMAnimatedTabBarItem 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}/NMAnimatedTabBarItem 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## NMAnimatedTabBarItem 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 Namshi 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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-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 | MIT License 18 | 19 | Copyright (c) 2018 Namshi 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 | NMAnimatedTabBarItem 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 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Phimpme : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Phimpme 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-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 | # Used as a return value for each invocation of `strip_invalid_archs` function. 10 | STRIP_BINARY_RETVAL=0 11 | 12 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 13 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 14 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 15 | 16 | # Copies and strips a vendored framework 17 | install_framework() 18 | { 19 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 20 | local source="${BUILT_PRODUCTS_DIR}/$1" 21 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 22 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 23 | elif [ -r "$1" ]; then 24 | local source="$1" 25 | fi 26 | 27 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 28 | 29 | if [ -L "${source}" ]; then 30 | echo "Symlinked..." 31 | source="$(readlink "${source}")" 32 | fi 33 | 34 | # Use filter instead of exclude so missing patterns don't throw errors. 35 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 36 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 37 | 38 | local basename 39 | basename="$(basename -s .framework "$1")" 40 | binary="${destination}/${basename}.framework/${basename}" 41 | if ! [ -r "$binary" ]; then 42 | binary="${destination}/${basename}" 43 | fi 44 | 45 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 46 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 47 | strip_invalid_archs "$binary" 48 | fi 49 | 50 | # Resign the code if required by the build settings to avoid unstable apps 51 | code_sign_if_enabled "${destination}/$(basename "$1")" 52 | 53 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 54 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 55 | local swift_runtime_libs 56 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 57 | for lib in $swift_runtime_libs; do 58 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 59 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 60 | code_sign_if_enabled "${destination}/${lib}" 61 | done 62 | fi 63 | } 64 | 65 | # Copies and strips a vendored dSYM 66 | install_dsym() { 67 | local source="$1" 68 | if [ -r "$source" ]; then 69 | # Copy the dSYM into a the targets temp dir. 70 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 71 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 72 | 73 | local basename 74 | basename="$(basename -s .framework.dSYM "$source")" 75 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 76 | 77 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 78 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 79 | strip_invalid_archs "$binary" 80 | fi 81 | 82 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 83 | # Move the stripped file into its final destination. 84 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 85 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 86 | else 87 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 88 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 89 | fi 90 | fi 91 | } 92 | 93 | # Signs a framework with the provided identity 94 | code_sign_if_enabled() { 95 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 96 | # Use the current code_sign_identitiy 97 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 98 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 99 | 100 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 101 | code_sign_cmd="$code_sign_cmd &" 102 | fi 103 | echo "$code_sign_cmd" 104 | eval "$code_sign_cmd" 105 | fi 106 | } 107 | 108 | # Strip invalid architectures 109 | strip_invalid_archs() { 110 | binary="$1" 111 | # Get architectures for current target binary 112 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 113 | # Intersect them with the architectures we are building for 114 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 115 | # If there are no archs supported by this binary then warn the user 116 | if [[ -z "$intersected_archs" ]]; then 117 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 118 | STRIP_BINARY_RETVAL=0 119 | return 120 | fi 121 | stripped="" 122 | for arch in $binary_archs; do 123 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 124 | # Strip non-valid architectures in-place 125 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 126 | stripped="$stripped $arch" 127 | fi 128 | done 129 | if [[ "$stripped" ]]; then 130 | echo "Stripped $binary of architectures:$stripped" 131 | fi 132 | STRIP_BINARY_RETVAL=1 133 | } 134 | 135 | 136 | if [[ "$CONFIGURATION" == "Debug" ]]; then 137 | install_framework "${BUILT_PRODUCTS_DIR}/NMAnimatedTabBarItem/NMAnimatedTabBarItem.framework" 138 | fi 139 | if [[ "$CONFIGURATION" == "Release" ]]; then 140 | install_framework "${BUILT_PRODUCTS_DIR}/NMAnimatedTabBarItem/NMAnimatedTabBarItem.framework" 141 | fi 142 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 143 | wait 144 | fi 145 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-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 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 12 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 13 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 14 | 15 | case "${TARGETED_DEVICE_FAMILY}" in 16 | 1,2) 17 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 18 | ;; 19 | 1) 20 | TARGET_DEVICE_ARGS="--target-device iphone" 21 | ;; 22 | 2) 23 | TARGET_DEVICE_ARGS="--target-device ipad" 24 | ;; 25 | 3) 26 | TARGET_DEVICE_ARGS="--target-device tv" 27 | ;; 28 | 4) 29 | TARGET_DEVICE_ARGS="--target-device watch" 30 | ;; 31 | *) 32 | TARGET_DEVICE_ARGS="--target-device mac" 33 | ;; 34 | esac 35 | 36 | install_resource() 37 | { 38 | if [[ "$1" = /* ]] ; then 39 | RESOURCE_PATH="$1" 40 | else 41 | RESOURCE_PATH="${PODS_ROOT}/$1" 42 | fi 43 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 44 | cat << EOM 45 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 46 | EOM 47 | exit 1 48 | fi 49 | case $RESOURCE_PATH in 50 | *.storyboard) 51 | 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}" || true 52 | 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} 53 | ;; 54 | *.xib) 55 | 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}" || true 56 | 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} 57 | ;; 58 | *.framework) 59 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 60 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 61 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 62 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 63 | ;; 64 | *.xcdatamodel) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 67 | ;; 68 | *.xcdatamodeld) 69 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 70 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 71 | ;; 72 | *.xcmappingmodel) 73 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 74 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 75 | ;; 76 | *.xcassets) 77 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 78 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 79 | ;; 80 | *) 81 | echo "$RESOURCE_PATH" || true 82 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 83 | ;; 84 | esac 85 | } 86 | 87 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 89 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 90 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 91 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 92 | fi 93 | rm -f "$RESOURCES_TO_COPY" 94 | 95 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 96 | then 97 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 98 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 99 | while read line; do 100 | if [[ $line != "${PODS_ROOT}*" ]]; then 101 | XCASSET_FILES+=("$line") 102 | fi 103 | done <<<"$OTHER_XCASSETS" 104 | 105 | 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}" 106 | fi 107 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme-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_PhimpmeVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_PhimpmeVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/NMAnimatedTabBarItem" 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}/NMAnimatedTabBarItem/NMAnimatedTabBarItem.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "NMAnimatedTabBarItem" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Phimpme { 2 | umbrella header "Pods-Phimpme-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Phimpme/Pods-Phimpme.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/NMAnimatedTabBarItem" 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}/NMAnimatedTabBarItem/NMAnimatedTabBarItem.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "NMAnimatedTabBarItem" 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_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Phimp.me iOS 4 | 5 | Phimp.me is a Photo App for iOS that aims to replace proprietary photo applications. It offers features such as taking photos, adding filters, editing images and uploading them to social networks. 6 | 7 | --- 8 | 9 | ### Features 10 | - [ ] Click beautiful images using the Phimp.me app. Use various advanced scene modes and variety of balance modes. 11 | 12 | - [ ] Use your voice actions to invoke Camera, Just say "Hey Siri click a picture". You can also select front and rear camera based on voice. 13 | 14 | - [ ] Browse the local gallery inside the app with folder and all photos mode. Copy, move and add a description to the images. 15 | 16 | - [ ] Edit images with various cool filters with optimized performance, built using GPUImage framework. 17 | 18 | - [ ] Enhance contrast, hue, satur, temp, tint, and sharpness of the image. 19 | 20 | - [ ] Use 'Crop and rotate' features from Transform section to get your perfect image. 21 | 22 | - [ ] Apply different stickers - facial, express, objects, comments, wishes, emojis, hashtag. 23 | 24 | - [ ] Write anything on the images in your handwriting!. 25 | 26 | - [ ] Easily go back and forth with 'redo' and 'undo'. 27 | 28 | - [ ] Finally, after all this editing you can easily share the image to your favourite social media sites with our easy-to-use sharing feature. 29 | 30 | - [ ] Facebook, Twitter, NextCloud, OwnCloud, Imgur, Dropbox, Box, Flickr, Pinterest, Instagram, Whatsapp, and Tumblr - You name it and we have it covered. 31 | 32 | --- 33 | 34 | ### Setting up the iOS Project 35 | 36 | 1. Clone the repo 37 | ``` 38 | $ git clone https://github.com/imjog/phimpme-iOS.git 39 | ``` 40 | 41 | 42 | 2. Navigate to the project folder 43 | ``` 44 | $ cd phimpme-iOS 45 | ``` 46 | 47 | 3. Open `Phimpme.xcodeproj` from the folder. 48 | 49 | 4. Build the project (⌘+B) and check for any errors. 50 | 51 | 5. Run the app (⌘+R).and test it. 52 | 53 | ### Screenshots 54 | Following design is using for app development: 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
72 | 73 | ### Branch Policy 74 | 75 | **Note:** For the initialization period all commits go directly to the master branch. In the next stages we follow the branch policy as below: 76 | 77 | We have the following branches 78 | * **ipa** - 79 | All the automatic builds generates, i.e., the ipas go into this branch 80 | * **master** - 81 | This contains the stable code. After significant features/bugfixes are accumulated on development, we move it to master. 82 | * **development** - 83 | All development goes on in this branch. If you're making a contribution, 84 | you are supposed to make a pull request to _development_. 85 | 86 | ### Code practices 87 | 88 | Please help us follow the best practice to make it easy for the reviewer as well as the contributor. We want to focus on the code quality more than on managing pull request ethics. 89 | 90 | * Single commit per pull request 91 | * For writing commit messages please read the [COMMITSTYLE](docs/commitStyle.md) carefully. Kindly adhere to the guidelines. 92 | * Follow uniform design practices. The design language must be consistent throughout the app. 93 | * The pull request will not get merged until and unless the commits are squashed. In case there are multiple commits on the PR, the commit author needs to squash them and not the maintainers cherrypicking and merging squashes. 94 | * If the PR is related to any front end change, please attach relevant screenshots in the pull request description. 95 | * Please follow the guides and code standards: [Swift Style Guide](https://github.com/linkedin/swift-style-guide) 96 | * Please follow the good iOS development practices: [iOS Good Practices](https://github.com/futurice/ios-good-practices) 97 | 98 | ### License 99 | 100 | This project is currently licensed under the MIT. A copy of [LICENSE](LICENSE) should be present along with the source code. 101 | -------------------------------------------------------------------------------- /docs/_static/AccountsScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/AccountsScreen.png -------------------------------------------------------------------------------- /docs/_static/AlertScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/AlertScreen.png -------------------------------------------------------------------------------- /docs/_static/CameraScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/CameraScreen.png -------------------------------------------------------------------------------- /docs/_static/EditingScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/EditingScreen.png -------------------------------------------------------------------------------- /docs/_static/GalleryScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/GalleryScreen.png -------------------------------------------------------------------------------- /docs/_static/MenuScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/MenuScreen.png -------------------------------------------------------------------------------- /docs/_static/SettingsScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/SettingsScreen.png -------------------------------------------------------------------------------- /docs/_static/ShareScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/ShareScreen.png -------------------------------------------------------------------------------- /docs/_static/SplashScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/SplashScreen.png -------------------------------------------------------------------------------- /docs/_static/WriteScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/WriteScreen.png -------------------------------------------------------------------------------- /docs/_static/phimpme-ios.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/phimpme-ios.sketch -------------------------------------------------------------------------------- /docs/_static/phimpme-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jogendra/phimpme-iOS/c600e8f2b50befab30c7abec1a77b9731edf1bdc/docs/_static/phimpme-logo.png -------------------------------------------------------------------------------- /docs/commitStyle.md: -------------------------------------------------------------------------------- 1 | ## Commit Style Guidelines for Phimpme iOS 2 | 3 | ### Message Structure 4 | Commit messages consist of three distinct parts, separated by a blank line: the title, an optional body/content, and an optional footer/metadata. The layout looks like this: 5 | 6 | type: subject 7 | 8 | body 9 | 10 | footer 11 | 12 | *** 13 | 14 | ### Title 15 | The title consists of the subject and type of the commit message. 16 | 17 | ### Type 18 | The type is contained within the title and can be one of the following types: 19 | 20 | * **feat:** a new feature 21 | * **fix:** a bug fix 22 | * **docs:** changes to documentation 23 | * **style:** formatting, missing semi-colons, etc; no code change 24 | * **refactor:** refactoring production code 25 | * **test:** adding tests, refactoring test; no production code change 26 | * **chore:** updating build tasks, package manager configs, etc; no production code change 27 | 28 | ### Subject 29 | The subject is a single short line summarising the change. It should be no greater than 50 characters, should begin with a capital letter and do not end with a period. 30 | 31 | Use an imperative tone to describe what a commit does, rather than what it did. For example, use fix; not fixed or fixes or fixing. 32 | 33 | For example: 34 | - fix: Typo in Commit Style guidelines 35 | - feat: Update UI of SessionDetailsActivity 36 | - fix: Remove deprecated methods 37 | - refactor: API endpoints and JSON assets 38 | instead of writing the following: 39 | - Fixed bug with Y 40 | - Changing behaviour of X 41 | 42 | ### Body 43 | The body includes the kind of information commit message (if any) should contain. 44 | 45 | Not every commit requires both a subject and a body. Sometimes a single line is fine, especially when the change is self-explanatory and no further context is necessary, therefore it is optional. The body is used to explain the what and why of a commit, not the how. 46 | 47 | When writing a body, the blank line between the title and the body is required and we should try to limit the length of each line to no more than 72 characters. 48 | 49 | ### The Footer 50 | The footer is optional and is used to reference issue tracker IDs. 51 | 52 | For example: 53 | Fixes #1170 54 | 55 | *** 56 | -------------------------------------------------------------------------------- /docs/issue_template.md: -------------------------------------------------------------------------------- 1 | **Actual Behaviour** 2 | 3 | 4 | 5 | **Expected Behaviour** 6 | 7 | 8 | 9 | **Steps to reproduce it** 10 | 11 | 12 | 13 | **LogCat for the issue** 14 | 15 | 16 | 17 | **Screenshots of the issue** 18 | 19 | 20 | 21 | **Would you like to work on the issue?** 22 | 23 | 24 | -------------------------------------------------------------------------------- /docs/pull_request_template.md: -------------------------------------------------------------------------------- 1 | Fixes #[Add issue number here. If you do not solve the issue entirely, please change the message e.g. "First steps for issues #IssueNumber] 2 | 3 | Changes: [Add here what changes were made in this issue and if possible provide links.] 4 | 5 | Screenshots for the change: 6 | --------------------------------------------------------------------------------