├── .gitignore ├── Meme Maker Mac ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── 128.png │ │ ├── 128@2x.png │ │ ├── 16.png │ │ ├── 16@2x.png │ │ ├── 256.png │ │ ├── 256@2x.png │ │ ├── 32.png │ │ ├── 32@2x.png │ │ ├── 512.png │ │ ├── 512@2x.png │ │ └── Contents.json │ ├── Contents.json │ ├── MemeBlank.imageset │ │ ├── Contents.json │ │ ├── MemeBlank.png │ │ └── MemeBlank@2x.png │ ├── MemeMaker.imageset │ │ ├── Contents.json │ │ ├── MemeMaker.png │ │ └── MemeMaker@2x.png │ ├── NSColorPanelOutline.imageset │ │ ├── Contents.json │ │ ├── NSColorPanelOutline.png │ │ └── NSColorPanelOutline@2x.png │ ├── TTTT.imageset │ │ ├── Contents.json │ │ ├── TTTT-1.png │ │ └── TTTT.png │ ├── WhiteRose.imageset │ │ ├── Contents.json │ │ └── WhiteRose.jpg │ ├── align-center.imageset │ │ ├── Contents.json │ │ └── align-center.png │ ├── align-justify.imageset │ │ ├── Contents.json │ │ └── align-justify.png │ ├── align-left.imageset │ │ ├── Contents.json │ │ └── align-left.png │ ├── align-right.imageset │ │ ├── Contents.json │ │ └── align-right.png │ ├── appstore.imageset │ │ ├── Contents.json │ │ ├── appstore.png │ │ └── appstore@2x.png │ ├── assets │ │ ├── 0.imageset │ │ │ ├── 0.jpg │ │ │ └── Contents.json │ │ ├── 1.imageset │ │ │ ├── 1.jpg │ │ │ └── Contents.json │ │ ├── 10.imageset │ │ │ ├── 10.jpg │ │ │ └── Contents.json │ │ ├── 11.imageset │ │ │ ├── 11.jpg │ │ │ └── Contents.json │ │ ├── 12.imageset │ │ │ ├── 12.jpg │ │ │ └── Contents.json │ │ ├── 13.imageset │ │ │ ├── 13.jpg │ │ │ └── Contents.json │ │ ├── 14.imageset │ │ │ ├── 14.jpg │ │ │ └── Contents.json │ │ ├── 15.imageset │ │ │ ├── 15.jpg │ │ │ └── Contents.json │ │ ├── 16.imageset │ │ │ ├── 16.jpg │ │ │ └── Contents.json │ │ ├── 17.imageset │ │ │ ├── 17.jpg │ │ │ └── Contents.json │ │ ├── 2.imageset │ │ │ ├── 2.jpg │ │ │ └── Contents.json │ │ ├── 3.imageset │ │ │ ├── 3.jpg │ │ │ └── Contents.json │ │ ├── 4.imageset │ │ │ ├── 4.jpg │ │ │ └── Contents.json │ │ ├── 5.imageset │ │ │ ├── 5.jpg │ │ │ └── Contents.json │ │ ├── 6.imageset │ │ │ ├── 6.jpg │ │ │ └── Contents.json │ │ ├── 7.imageset │ │ │ ├── 7.jpg │ │ │ └── Contents.json │ │ ├── 8.imageset │ │ │ ├── 8.jpg │ │ │ └── Contents.json │ │ ├── 9.imageset │ │ │ ├── 9.jpg │ │ │ └── Contents.json │ │ └── Contents.json │ ├── attrs.imageset │ │ ├── Contents.json │ │ ├── attrs.png │ │ └── attrs@2x.png │ ├── attrsW.imageset │ │ ├── Contents.json │ │ ├── attrsW.png │ │ └── attrsW@2x.png │ ├── grid.imageset │ │ ├── Contents.json │ │ ├── grid.png │ │ └── grid@2x.png │ ├── gridW.imageset │ │ ├── Contents.json │ │ ├── gridW.png │ │ └── gridW@2x.png │ ├── list.imageset │ │ ├── Contents.json │ │ ├── list.png │ │ └── list@2x.png │ ├── listW.imageset │ │ ├── Contents.json │ │ ├── listW.png │ │ └── listW@2x.png │ ├── minus.imageset │ │ ├── Contents.json │ │ └── minus.png │ ├── plus.imageset │ │ ├── Contents.json │ │ └── plus.png │ ├── redo.imageset │ │ ├── Contents.json │ │ ├── redo.png │ │ └── redo@2x.png │ ├── reset.imageset │ │ ├── Contents.json │ │ ├── reset.png │ │ └── reset@2x.png │ ├── resetW.imageset │ │ ├── Contents.json │ │ ├── resetW.png │ │ └── resetW@2x.png │ ├── save.imageset │ │ ├── Contents.json │ │ ├── save.png │ │ └── save@2x.png │ ├── saveW.imageset │ │ ├── Contents.json │ │ ├── saveW.png │ │ └── saveW@2x.png │ ├── share.imageset │ │ ├── Contents.json │ │ ├── share.png │ │ └── share@2x.png │ ├── shareW.imageset │ │ ├── Contents.json │ │ ├── shareW.png │ │ └── shareW@2x.png │ ├── sort.imageset │ │ ├── Contents.json │ │ ├── sort.png │ │ └── sort@2x.png │ ├── sortAlpha.imageset │ │ ├── Contents.json │ │ ├── sortAlpha.png │ │ └── sortAlpha@2x.png │ ├── sortAlphaW.imageset │ │ ├── Contents.json │ │ ├── sortAlphaW.png │ │ └── sortAlphaW@2x.png │ ├── sortRank.imageset │ │ ├── Contents.json │ │ ├── sortRank.png │ │ └── sortRank@2x.png │ ├── sortRankW.imageset │ │ ├── Contents.json │ │ ├── sortRankW.png │ │ └── sortRankW@2x.png │ ├── sortW.imageset │ │ ├── Contents.json │ │ ├── sortW.png │ │ └── sortW@2x.png │ ├── startup.imageset │ │ ├── Contents.json │ │ └── startup.png │ └── undo.imageset │ │ ├── Contents.json │ │ ├── undo.png │ │ └── undo@2x.png ├── Base.lproj │ └── Main.storyboard ├── Controllers │ ├── AttributeEditorViewController.swift │ ├── EditorViewController.swift │ ├── HelpViewController.swift │ ├── SettingsViewController.swift │ ├── SortViewController.swift │ ├── ViewController.swift │ └── WindowController.swift ├── Info.plist ├── Meme Maker Mac-Bridging-Header.h ├── Meme Maker Mac.entitlements ├── Meme_Maker_Mac.xcdatamodeld │ ├── .xccurrentversion │ └── Meme_Maker_Mac.xcdatamodel │ │ └── contents ├── Models │ ├── Constants.swift │ ├── MemeFetcher.swift │ ├── SettingsManager.swift │ ├── XMeme+CoreDataProperties.swift │ ├── XMeme.swift │ ├── XTextAttributes.swift │ └── XUndoManager.swift ├── Supporting Files │ ├── Default │ │ ├── defaultMemes.dat │ │ └── defaultMemes.zip │ ├── DragDropImageView │ │ ├── DragDropImageView.h │ │ └── DragDropImageView.m │ ├── GRVibrantTitlebarWindow │ │ ├── GRSeparatorLineView.h │ │ ├── GRSeparatorLineView.m │ │ ├── GRVibrantTitleView.h │ │ ├── GRVibrantTitleView.m │ │ ├── GRVibrantTitlebarView.h │ │ ├── GRVibrantTitlebarView.m │ │ ├── GRVibrantTitlebarWindow.h │ │ └── GRVibrantTitlebarWindow.m │ ├── PrefixHeader.swift │ └── Quotes │ │ └── quotes.json └── Views │ └── Cells │ ├── BaseCollectionViewItem.swift │ ├── GridCollectionViewItem.swift │ ├── GridCollectionViewItem.xib │ ├── ListCollectionViewItel.swift │ └── ListCollectionViewItel.xib ├── Meme Maker MacTests ├── Info.plist └── Meme_Maker_MacTests.swift ├── Meme Maker MacUITests ├── Info.plist └── Meme_Maker_MacUITests.swift ├── Meme Maker.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── Avikant.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── Meme Maker Mac.xcscheme │ └── xcschememanagement.plist ├── Meme Maker.xcworkspace └── contents.xcworkspacedata ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── Avikant.xcuserdatad │ │ └── xcschemes │ │ ├── Pods-Meme Maker Mac.xcscheme │ │ ├── Pods-Meme Maker MacTests.xcscheme │ │ ├── Pods-Meme Maker MacUITests.xcscheme │ │ ├── SSZipArchive.xcscheme │ │ └── xcschememanagement.plist ├── SSZipArchive │ ├── LICENSE.txt │ ├── README.md │ └── SSZipArchive │ │ ├── Common.h │ │ ├── SSZipArchive.h │ │ ├── SSZipArchive.m │ │ ├── ZipArchive.h │ │ ├── aes │ │ ├── aes.h │ │ ├── aes_via_ace.h │ │ ├── aescrypt.c │ │ ├── aeskey.c │ │ ├── aesopt.h │ │ ├── aestab.c │ │ ├── aestab.h │ │ ├── brg_endian.h │ │ ├── brg_types.h │ │ ├── entropy.c │ │ ├── entropy.h │ │ ├── fileenc.c │ │ ├── fileenc.h │ │ ├── hmac.c │ │ ├── hmac.h │ │ ├── prng.c │ │ ├── prng.h │ │ ├── pwd2key.c │ │ ├── pwd2key.h │ │ ├── sha1.c │ │ └── sha1.h │ │ └── minizip │ │ ├── crypt.h │ │ ├── ioapi.c │ │ ├── ioapi.h │ │ ├── mztools.c │ │ ├── mztools.h │ │ ├── unzip.c │ │ ├── unzip.h │ │ ├── zip.c │ │ └── zip.h └── Target Support Files │ ├── Pods-Meme Maker │ ├── Info.plist │ ├── Pods-Meme Maker-acknowledgements.markdown │ ├── Pods-Meme Maker-acknowledgements.plist │ ├── Pods-Meme Maker-dummy.m │ ├── Pods-Meme Maker-frameworks.sh │ ├── Pods-Meme Maker-resources.sh │ ├── Pods-Meme Maker-umbrella.h │ ├── Pods-Meme Maker.debug.xcconfig │ ├── Pods-Meme Maker.modulemap │ └── Pods-Meme Maker.release.xcconfig │ ├── Pods-Meme MakerTests │ ├── Info.plist │ ├── Pods-Meme MakerTests-acknowledgements.markdown │ ├── Pods-Meme MakerTests-acknowledgements.plist │ ├── Pods-Meme MakerTests-dummy.m │ ├── Pods-Meme MakerTests-frameworks.sh │ ├── Pods-Meme MakerTests-resources.sh │ ├── Pods-Meme MakerTests-umbrella.h │ ├── Pods-Meme MakerTests.debug.xcconfig │ ├── Pods-Meme MakerTests.modulemap │ └── Pods-Meme MakerTests.release.xcconfig │ ├── Pods-Meme MakerUITests │ ├── Info.plist │ ├── Pods-Meme MakerUITests-acknowledgements.markdown │ ├── Pods-Meme MakerUITests-acknowledgements.plist │ ├── Pods-Meme MakerUITests-dummy.m │ ├── Pods-Meme MakerUITests-frameworks.sh │ ├── Pods-Meme MakerUITests-resources.sh │ ├── Pods-Meme MakerUITests-umbrella.h │ ├── Pods-Meme MakerUITests.debug.xcconfig │ ├── Pods-Meme MakerUITests.modulemap │ └── Pods-Meme MakerUITests.release.xcconfig │ └── SSZipArchive │ ├── Info.plist │ ├── SSZipArchive-dummy.m │ ├── SSZipArchive-prefix.pch │ ├── SSZipArchive-umbrella.h │ ├── SSZipArchive.modulemap │ └── SSZipArchive.xcconfig └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | ## Playgrounds 31 | timeline.xctimeline 32 | playground.xcworkspace 33 | 34 | # Swift Package Manager 35 | # 36 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 37 | # Packages/ 38 | .build/ 39 | 40 | # CocoaPods 41 | # 42 | # We recommend against adding the Pods directory to your .gitignore. However 43 | # you should judge for yourself, the pros and cons are mentioned at: 44 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 45 | # 46 | # Pods/ 47 | 48 | # Carthage 49 | # 50 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 51 | # Carthage/Checkouts 52 | 53 | Carthage/Build 54 | 55 | # fastlane 56 | # 57 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 58 | # screenshots whenever they are needed. 59 | # For more information about the recommended setup visit: 60 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 61 | 62 | fastlane/report.xml 63 | fastlane/Preview.html 64 | fastlane/screenshots 65 | fastlane/test_output -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/128@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/16@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/256@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/32@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/512@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "16@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "32@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "128@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "256@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "512@2x.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeBlank.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "MemeBlank.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "MemeBlank@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeBlank.imageset/MemeBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/MemeBlank.imageset/MemeBlank.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeBlank.imageset/MemeBlank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/MemeBlank.imageset/MemeBlank@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeMaker.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "MemeMaker.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "MemeMaker@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeMaker.imageset/MemeMaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/MemeMaker.imageset/MemeMaker.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/MemeMaker.imageset/MemeMaker@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/MemeMaker.imageset/MemeMaker@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/NSColorPanelOutline.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "NSColorPanelOutline.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "NSColorPanelOutline@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/NSColorPanelOutline.imageset/NSColorPanelOutline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/NSColorPanelOutline.imageset/NSColorPanelOutline.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/NSColorPanelOutline.imageset/NSColorPanelOutline@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/NSColorPanelOutline.imageset/NSColorPanelOutline@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/TTTT.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "TTTT-1.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "TTTT.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/TTTT.imageset/TTTT-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/TTTT.imageset/TTTT-1.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/TTTT.imageset/TTTT.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/TTTT.imageset/TTTT.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/WhiteRose.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "WhiteRose.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/WhiteRose.imageset/WhiteRose.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/WhiteRose.imageset/WhiteRose.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-center.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "align-center.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-center.imageset/align-center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/align-center.imageset/align-center.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-justify.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "align-justify.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-justify.imageset/align-justify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/align-justify.imageset/align-justify.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-left.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "align-left.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-left.imageset/align-left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/align-left.imageset/align-left.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-right.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "align-right.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/align-right.imageset/align-right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/align-right.imageset/align-right.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/appstore.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "appstore.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "appstore@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/appstore.imageset/appstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/appstore.imageset/appstore.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/appstore.imageset/appstore@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/appstore.imageset/appstore@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/0.imageset/0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/0.imageset/0.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/0.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "0.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/1.imageset/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/1.imageset/1.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "1.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/10.imageset/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/10.imageset/10.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/10.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "10.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/11.imageset/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/11.imageset/11.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/11.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "11.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/12.imageset/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/12.imageset/12.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/12.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "12.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/13.imageset/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/13.imageset/13.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/13.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "13.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/14.imageset/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/14.imageset/14.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/14.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "14.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/15.imageset/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/15.imageset/15.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/15.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "15.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/16.imageset/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/16.imageset/16.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/16.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "16.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/17.imageset/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/17.imageset/17.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/17.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "17.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/2.imageset/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/2.imageset/2.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "2.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/3.imageset/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/3.imageset/3.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "3.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/4.imageset/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/4.imageset/4.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "4.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/5.imageset/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/5.imageset/5.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/5.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "5.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/6.imageset/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/6.imageset/6.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/6.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "6.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/7.imageset/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/7.imageset/7.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/7.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "7.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/8.imageset/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/8.imageset/8.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/8.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "8.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/9.imageset/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/assets/9.imageset/9.jpg -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/9.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "9.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/assets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrs.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "attrs.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "attrs@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrs.imageset/attrs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/attrs.imageset/attrs.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrs.imageset/attrs@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/attrs.imageset/attrs@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrsW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "attrsW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "attrsW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrsW.imageset/attrsW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/attrsW.imageset/attrsW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/attrsW.imageset/attrsW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/attrsW.imageset/attrsW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/grid.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "grid.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "grid@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/grid.imageset/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/grid.imageset/grid.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/grid.imageset/grid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/grid.imageset/grid@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/gridW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "gridW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "gridW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/gridW.imageset/gridW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/gridW.imageset/gridW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/gridW.imageset/gridW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/gridW.imageset/gridW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/list.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "list.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "list@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/list.imageset/list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/list.imageset/list.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/list.imageset/list@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/list.imageset/list@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/listW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "listW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "listW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/listW.imageset/listW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/listW.imageset/listW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/listW.imageset/listW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/listW.imageset/listW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/minus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "minus.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/minus.imageset/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/minus.imageset/minus.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/plus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "plus.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/plus.imageset/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/plus.imageset/plus.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/redo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "redo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "redo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/redo.imageset/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/redo.imageset/redo.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/redo.imageset/redo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/redo.imageset/redo@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/reset.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "reset.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "reset@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/reset.imageset/reset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/reset.imageset/reset.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/reset.imageset/reset@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/reset.imageset/reset@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/resetW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "resetW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "resetW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/resetW.imageset/resetW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/resetW.imageset/resetW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/resetW.imageset/resetW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/resetW.imageset/resetW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/save.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "save.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "save@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/save.imageset/save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/save.imageset/save.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/save.imageset/save@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/save.imageset/save@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/saveW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "saveW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "saveW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/saveW.imageset/saveW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/saveW.imageset/saveW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/saveW.imageset/saveW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/saveW.imageset/saveW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/share.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "share.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "share@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/share.imageset/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/share.imageset/share.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/share.imageset/share@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/share.imageset/share@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/shareW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "shareW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "shareW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/shareW.imageset/shareW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/shareW.imageset/shareW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/shareW.imageset/shareW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/shareW.imageset/shareW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sort.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sort.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sort@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sort.imageset/sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sort.imageset/sort.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sort.imageset/sort@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sort.imageset/sort@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlpha.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sortAlpha.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sortAlpha@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlpha.imageset/sortAlpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortAlpha.imageset/sortAlpha.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlpha.imageset/sortAlpha@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortAlpha.imageset/sortAlpha@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlphaW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sortAlphaW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sortAlphaW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlphaW.imageset/sortAlphaW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortAlphaW.imageset/sortAlphaW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortAlphaW.imageset/sortAlphaW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortAlphaW.imageset/sortAlphaW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRank.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sortRank.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sortRank@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRank.imageset/sortRank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortRank.imageset/sortRank.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRank.imageset/sortRank@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortRank.imageset/sortRank@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRankW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sortRankW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sortRankW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRankW.imageset/sortRankW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortRankW.imageset/sortRankW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortRankW.imageset/sortRankW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortRankW.imageset/sortRankW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortW.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sortW.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "sortW@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortW.imageset/sortW.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortW.imageset/sortW.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/sortW.imageset/sortW@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/sortW.imageset/sortW@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/startup.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "startup.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/startup.imageset/startup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/startup.imageset/startup.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/undo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "undo.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "undo@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/undo.imageset/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/undo.imageset/undo.png -------------------------------------------------------------------------------- /Meme Maker Mac/Assets.xcassets/undo.imageset/undo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Assets.xcassets/undo.imageset/undo@2x.png -------------------------------------------------------------------------------- /Meme Maker Mac/Controllers/AttributeEditorViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AttributeEditorViewController.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/5/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class AttributeEditorViewController: NSViewController { 12 | 13 | var topTextAttr: XTextAttributes = XTextAttributes(savename: "topAttr") 14 | var bottomTextAttr: XTextAttributes = XTextAttributes(savename: "bottomAttr") 15 | 16 | @IBOutlet weak var fontscaleSlider: NSSlider! 17 | @IBOutlet weak var outlinethicknessSlider: NSSlider! 18 | @IBOutlet weak var opacitySlider: NSSlider! 19 | @IBOutlet weak var shadowEnabledButton: NSButton! 20 | @IBOutlet weak var shadow3dbutton: NSButton! 21 | 22 | @IBOutlet weak var veView: NSVisualEffectView! 23 | 24 | override func viewDidLoad() { 25 | super.viewDidLoad() 26 | // Do view setup here. 27 | 28 | updateViews() 29 | 30 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kDarkModeChangedNotification), object: nil, queue: OperationQueue.main) { (notification) in 31 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 32 | self.veView.material = darkMode ? .dark : .light 33 | } 34 | 35 | } 36 | 37 | override func viewDidAppear() { 38 | super.viewDidAppear() 39 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 40 | NotificationCenter.default.post(name: Notification.Name(rawValue: kDarkModeChangedNotification), object: nil, userInfo: ["darkMode": Bool(darkMode)]) 41 | } 42 | 43 | func updateViews() -> Void { 44 | 45 | let size = min(topTextAttr.fontSize, bottomTextAttr.fontSize) 46 | fontscaleSlider.integerValue = min(Int(size/20), 6) 47 | 48 | let strokeWidth = min(topTextAttr.strokeWidth, bottomTextAttr.strokeWidth) 49 | outlinethicknessSlider.integerValue = Int(strokeWidth) 50 | 51 | let opacity = topTextAttr.opacity 52 | opacitySlider.doubleValue = Double(opacity) 53 | 54 | let shadowEnabled = topTextAttr.shadowEnabled 55 | shadowEnabledButton.state = shadowEnabled ? NSOnState : NSOffState 56 | shadow3dbutton.isHidden = !shadowEnabled 57 | 58 | let shadow3d = topTextAttr.shadow3D 59 | shadow3dbutton.state = shadow3d ? NSOnState : NSOffState 60 | 61 | } 62 | 63 | func updateAttributes() -> Void { 64 | let userInfo:[String: AnyObject] = [kTopAttrName: topTextAttr, kBottomAttrName: bottomTextAttr] 65 | NotificationCenter.default.post(name: Notification.Name(rawValue: kUpdateAttributesNotification), object: nil, userInfo: userInfo) 66 | } 67 | 68 | } 69 | 70 | extension AttributeEditorViewController { 71 | 72 | @IBAction func fontscaleSliderAction(_ sender: NSControl) { 73 | let result = CGFloat((sender.intValue + 1) * 20) 74 | topTextAttr.fontSize = result 75 | bottomTextAttr.fontSize = result 76 | updateAttributes() 77 | } 78 | 79 | @IBAction func outlinethicknessSliderAction(_ sender: NSControl) { 80 | let result = CGFloat(sender.intValue) 81 | topTextAttr.strokeWidth = result 82 | bottomTextAttr.strokeWidth = result 83 | updateAttributes() 84 | } 85 | 86 | @IBAction func opacitySliderAction(_ sender: NSControl) { 87 | let result = CGFloat(sender.doubleValue) 88 | topTextAttr.opacity = result 89 | bottomTextAttr.opacity = result 90 | updateAttributes() 91 | } 92 | 93 | @IBAction func shadowEnabledAction(_ sender: NSButton) { 94 | let result = sender.state == NSOnState 95 | shadow3dbutton.isHidden = !result 96 | topTextAttr.shadowEnabled = result 97 | bottomTextAttr.shadowEnabled = result 98 | updateAttributes() 99 | } 100 | 101 | @IBAction func shadow3dAction(_ sender: NSButton) { 102 | let result = sender.state == NSOnState 103 | topTextAttr.shadow3D = result 104 | bottomTextAttr.shadow3D = result 105 | updateAttributes() 106 | } 107 | 108 | @IBAction func textColorAction(_ sender: AnyObject) { 109 | NotificationCenter.default.post(name: Notification.Name(rawValue: kTextColorPanelNotification), object: nil) 110 | } 111 | 112 | @IBAction func outlineColorAction(_ sender: AnyObject) { 113 | NotificationCenter.default.post(name: Notification.Name(rawValue: kOutlineColorPanelNotification), object: nil) 114 | } 115 | 116 | @IBAction func textFontAction(_ sender: AnyObject) { 117 | let topTextAttr: XTextAttributes = XTextAttributes(savename: kTopAttrName) 118 | NSFontPanel.shared().setPanelFont(topTextAttr.font, isMultiple: false) 119 | NSFontPanel.shared().orderFront(sender) 120 | } 121 | 122 | } 123 | -------------------------------------------------------------------------------- /Meme Maker Mac/Controllers/SettingsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsViewController.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/6/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class SettingsViewController: NSViewController { 12 | 13 | @IBOutlet weak var resetSettingsButton: NSButton! 14 | 15 | @IBOutlet weak var darkModeButton: NSButton! 16 | 17 | @IBOutlet weak var lastUpdatedLabel: NSTextField! 18 | 19 | @IBOutlet weak var updationSpinner: NSProgressIndicator! 20 | 21 | @IBOutlet weak var veView: NSVisualEffectView! 22 | 23 | override func viewDidLoad() { 24 | super.viewDidLoad() 25 | // Do view setup here. 26 | 27 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kDarkModeChangedNotification), object: nil, queue: OperationQueue.main) { (notification) in 28 | self.updateViews() 29 | } 30 | 31 | } 32 | 33 | override func viewDidAppear() { 34 | super.viewDidAppear() 35 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 36 | NotificationCenter.default.post(name: Notification.Name(rawValue: kDarkModeChangedNotification), object: nil, userInfo: ["darkMode": Bool(darkMode)]) 37 | } 38 | 39 | func updateViews() -> Void { 40 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 41 | veView.material = darkMode ? .dark : .light 42 | darkModeButton.state = darkMode ? NSOnState : NSOffState 43 | resetSettingsButton.state = SettingsManager.getBool(kSettingsResetSettingsOnLaunch) ? NSOnState : NSOffState 44 | lastUpdatedLabel.stringValue = "Last updated: " + SettingsManager.getLastUpdateDateString() 45 | } 46 | 47 | } 48 | 49 | extension SettingsViewController { 50 | 51 | @IBAction func memeMakerAction(_ sender: AnyObject) { 52 | 53 | } 54 | 55 | @IBAction func resetSettingsAction(_ sender: AnyObject) { 56 | SettingsManager.setBool(sender.state == NSOnState, key: kSettingsResetSettingsOnLaunch) 57 | } 58 | 59 | @IBAction func darkModeAction(_ sender: AnyObject) { 60 | let darkMode = sender.state == NSOnState 61 | veView.material = darkMode ? .dark : .light; 62 | SettingsManager.setBool(darkMode, key: kSettingsDarkMode) 63 | NotificationCenter.default.post(name: Notification.Name(rawValue: kDarkModeChangedNotification), object: nil, userInfo: ["darkMode": Bool(darkMode)]) 64 | } 65 | 66 | @IBAction func updateMemesAction(_ sender: AnyObject) { 67 | let fetcher = MemeFetcher() 68 | fetcher.fetchMemes() 69 | updationSpinner.isHidden = false 70 | updationSpinner.startAnimation(self) 71 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kFetchCompleteNotification), object: nil, queue: OperationQueue.main) { (notification) in 72 | self.updationSpinner.stopAnimation(self) 73 | self.updationSpinner.isHidden = true 74 | self.lastUpdatedLabel.stringValue = "Last updated: " + SettingsManager.getLastUpdateDateString() 75 | } 76 | } 77 | 78 | @IBAction func reportBugAction(_ sender: AnyObject) { 79 | let shareItems = [getSystemDetails()] 80 | let service = NSSharingService(named: NSSharingServiceNameComposeEmail) 81 | service?.delegate = self 82 | service?.recipients = ["samaritan@darmarmy.xyz"] 83 | service?.subject = "Meme maker bug report" 84 | service?.perform(withItems: shareItems) 85 | } 86 | 87 | @IBAction func feedbackAction(_ sender: AnyObject) { 88 | let shareItems = [getSystemDetails()] 89 | let service = NSSharingService(named: NSSharingServiceNameComposeEmail) 90 | service?.delegate = self 91 | service?.recipients = ["samaritan@darmarmy.xyz"] 92 | service?.subject = "Meme maker feedback/suggestion" 93 | service?.perform(withItems: shareItems) 94 | } 95 | 96 | func getSystemDetails() -> String { 97 | if let dict = NSDictionary(contentsOfFile: "/System/Library/CoreServices/SystemVersion.plist") { 98 | let details = "\n\n\nSystem version = \(dict["ProductName"]!) \(dict["ProductVersion"]!)\n" 99 | return details 100 | } 101 | return "" 102 | } 103 | 104 | } 105 | 106 | extension SettingsViewController: NSSharingServiceDelegate { 107 | 108 | func sharingService(_ sharingService: NSSharingService, didShareItems items: [Any]) { 109 | print("share success") 110 | } 111 | 112 | func sharingService(_ sharingService: NSSharingService, didFailToShareItems items: [Any], error: Error) { 113 | print("share failure") 114 | } 115 | 116 | } 117 | 118 | -------------------------------------------------------------------------------- /Meme Maker Mac/Controllers/SortViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SortViewController.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/6/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class SortViewController: NSViewController { 12 | 13 | @IBOutlet weak var defaultSortButton: NSButton! 14 | @IBOutlet weak var alphaSortButton: NSButton! 15 | @IBOutlet weak var popSortButton: NSButton! 16 | 17 | @IBOutlet weak var veView: NSVisualEffectView! 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | // Do view setup here. 22 | 23 | defaultSortButton.state = NSOffState 24 | alphaSortButton.state = NSOffState 25 | popSortButton.state = NSOffState 26 | 27 | let sortKey = SettingsManager.getInteger(kSettingsLastSortKey) 28 | if sortKey > 0 { 29 | if (sortKey == 1) { 30 | defaultSortButton.state = NSOnState 31 | } else if (sortKey == 2) { 32 | alphaSortButton.state = NSOnState 33 | } else if (sortKey == 3) { 34 | popSortButton.state = NSOnState 35 | } 36 | } else { 37 | defaultSortButton.state = NSOnState 38 | SettingsManager.setInteger(1, key: kSettingsLastSortKey) 39 | } 40 | 41 | updateViews() 42 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kDarkModeChangedNotification), object: nil, queue: OperationQueue.main) { (notification) in 43 | self.updateViews() 44 | } 45 | 46 | } 47 | 48 | func updateViews() -> Void { 49 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 50 | var append = "" 51 | if (darkMode) { 52 | veView.material = .dark 53 | append = "W" 54 | } else { 55 | veView.material = .light 56 | } 57 | defaultSortButton.image = NSImage(named: "sort" + append) 58 | alphaSortButton.image = NSImage(named: "sortAlpha" + append) 59 | popSortButton.image = NSImage(named: "sortRank" + append) 60 | 61 | } 62 | 63 | @IBAction func defaultSortAction(_ sender: AnyObject) { 64 | defaultSortButton.state = NSOnState 65 | alphaSortButton.state = NSOffState 66 | popSortButton.state = NSOffState 67 | SettingsManager.setInteger(1, key: kSettingsLastSortKey) 68 | NotificationCenter.default.post(name: Notification.Name(rawValue: kSortModeChangedNotification), object: nil) 69 | self.dismiss(self) 70 | } 71 | 72 | @IBAction func alphaSortAction(_ sender: AnyObject) { 73 | defaultSortButton.state = NSOffState 74 | alphaSortButton.state = NSOnState 75 | popSortButton.state = NSOffState 76 | SettingsManager.setInteger(2, key: kSettingsLastSortKey) 77 | NotificationCenter.default.post(name: Notification.Name(rawValue: kSortModeChangedNotification), object: nil) 78 | self.dismiss(self) 79 | } 80 | 81 | @IBAction func popSortAction(_ sender: AnyObject) { 82 | defaultSortButton.state = NSOffState 83 | alphaSortButton.state = NSOffState 84 | popSortButton.state = NSOnState 85 | SettingsManager.setInteger(3, key: kSettingsLastSortKey) 86 | NotificationCenter.default.post(name: Notification.Name(rawValue: kSortModeChangedNotification), object: nil) 87 | self.dismiss(self) 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /Meme Maker Mac/Controllers/WindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WindowController.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 5/20/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class WindowController: NSWindowController { 12 | 13 | @IBOutlet weak var toolbar: NSToolbar! 14 | 15 | @IBOutlet weak var gridToolBarItem: NSToolbarItem! 16 | @IBOutlet weak var sortToolbarItem: NSToolbarItem! 17 | @IBOutlet weak var resetToolbarItem: NSToolbarItem! 18 | @IBOutlet weak var attributesToolbarItem: NSToolbarItem! 19 | @IBOutlet weak var shareToolbarItem: NSToolbarItem! 20 | @IBOutlet weak var saveToolbarItem: NSToolbarItem! 21 | 22 | @IBOutlet weak var searchField: NSSearchField! 23 | 24 | var grid: Bool = false { 25 | didSet { 26 | SettingsManager.setBool(grid, key: kSettingsViewModeIsGrid) 27 | NotificationCenter.default.post(name: Notification.Name(rawValue: kToggleViewModeNotification), object: nil, userInfo: [kToggleViewModeKey:NSNumber.init(value: grid as Bool)]) 28 | self.updateButtonImages() 29 | } 30 | } 31 | 32 | var isFullScreen: Bool = false { 33 | didSet { 34 | self.updateButtonImages() 35 | } 36 | } 37 | 38 | override func windowDidLoad() { 39 | 40 | super.windowDidLoad() 41 | 42 | grid = SettingsManager.getBool(kSettingsViewModeIsGrid) 43 | updateButtonImages() 44 | 45 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kDarkModeChangedNotification), object: nil, queue: OperationQueue.main) { (notification) in 46 | self.updateButtonImages() 47 | } 48 | 49 | NotificationCenter.default.addObserver(forName: NSNotification.Name.NSWindowWillEnterFullScreen, object: nil, queue: OperationQueue.main) { (notification) in 50 | self.isFullScreen = true 51 | } 52 | 53 | NotificationCenter.default.addObserver(forName: NSNotification.Name.NSWindowWillExitFullScreen, object: nil, queue: OperationQueue.main) { (notification) in 54 | self.isFullScreen = false 55 | } 56 | 57 | if let text = SettingsManager.getObject(kSettingsLastSearchKey) { 58 | searchField.stringValue = text as! String 59 | } 60 | 61 | } 62 | 63 | func updateButtonImages() -> Void { 64 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 65 | var suffix = "" 66 | if (darkMode && !isFullScreen) { 67 | suffix = "W" 68 | toolbar.showsBaselineSeparator = false 69 | } else { 70 | toolbar.showsBaselineSeparator = true 71 | } 72 | if (grid) { gridToolBarItem.image = NSImage(named: "list" + suffix) } 73 | else { gridToolBarItem.image = NSImage(named: "grid" + suffix) } 74 | sortToolbarItem.image = NSImage(named: "sort" + suffix) 75 | resetToolbarItem.image = NSImage(named: "reset" + suffix) 76 | attributesToolbarItem.image = NSImage(named: "attrs" + suffix) 77 | saveToolbarItem.image = NSImage(named: "save" + suffix) 78 | shareToolbarItem.image = NSImage(named: "share" + suffix) 79 | } 80 | 81 | // MARK: - Toolbar actions 82 | 83 | @IBAction func gridViewToggleAction(_ sender: AnyObject) { 84 | grid = !grid 85 | } 86 | 87 | @IBAction func sortToolbarAction(_ sender: AnyObject) { 88 | 89 | } 90 | 91 | @IBAction func fontToolbarAction(_ sender: AnyObject) { 92 | 93 | } 94 | 95 | @IBAction func textColorToolbarAction(_ sender: AnyObject) { 96 | NotificationCenter.default.post(name: Notification.Name(rawValue: kTextColorPanelNotification), object: nil) 97 | } 98 | 99 | @IBAction func outlineColorToolbarAction(_ sender: AnyObject) { 100 | NotificationCenter.default.post(name: Notification.Name(rawValue: kOutlineColorPanelNotification), object: nil) 101 | } 102 | 103 | @IBAction func resetToolbarAction(_ sender: AnyObject) { 104 | NotificationCenter.default.post(name: Notification.Name(rawValue: kResetPositionNotification), object: nil) 105 | } 106 | 107 | @IBAction func undoToolbarAction(_ sender: AnyObject) { 108 | NotificationCenter.default.post(name: Notification.Name(rawValue: kUndoNotification), object: nil) 109 | } 110 | 111 | @IBAction func redoToolbarAction(_ sender: AnyObject) { 112 | NotificationCenter.default.post(name: Notification.Name(rawValue: kRedoNotification), object: nil) 113 | } 114 | 115 | @IBAction func shareToolbarAction(_ sender: AnyObject) { 116 | NotificationCenter.default.post(name: Notification.Name(rawValue: kShareNotification), object: nil, userInfo: ["sender": sender]) 117 | } 118 | 119 | @IBAction func saveToolbarAction(_ sender: AnyObject) { 120 | NotificationCenter.default.post(name: Notification.Name(rawValue: kSaveNotification), object: nil) 121 | } 122 | 123 | } 124 | 125 | extension WindowController { 126 | 127 | override func controlTextDidChange(_ obj: Notification) { 128 | let text = self.searchField.stringValue 129 | SettingsManager.setObject(text, key: kSettingsLastSearchKey) 130 | NotificationCenter.default.post(name: Notification.Name(rawValue: kSearchBarTextChangedNotification), object: nil, userInfo: [kSettingsLastSearchKey: text]) 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /Meme Maker Mac/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Meme Maker 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 9 25 | LSApplicationCategoryType 26 | public.app-category.entertainment 27 | LSMinimumSystemVersion 28 | $(MACOSX_DEPLOYMENT_TARGET) 29 | NSAppTransportSecurity 30 | 31 | NSAllowsArbitraryLoads 32 | 33 | 34 | NSHumanReadableCopyright 35 | Copyright © 2016 avikantz | Dark Army. All rights reserved. 36 | NSMainStoryboardFile 37 | Main 38 | NSPrincipalClass 39 | NSApplication 40 | 41 | 42 | -------------------------------------------------------------------------------- /Meme Maker Mac/Meme Maker Mac-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import "DragDropImageView.h" 6 | #import "GRVibrantTitlebarWindow.h" -------------------------------------------------------------------------------- /Meme Maker Mac/Meme Maker Mac.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-write 8 | 9 | com.apple.security.network.client 10 | 11 | com.apple.security.print 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Meme Maker Mac/Meme_Maker_Mac.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | Meme_Maker_Mac.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /Meme Maker Mac/Meme_Maker_Mac.xcdatamodeld/Meme_Maker_Mac.xcdatamodel/contents: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Meme Maker Mac/Models/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/6/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | // MARK: - Settings item 12 | 13 | let kSettingsTimesLaunched = "kTimesLaunched" 14 | let kSettingsLastMemeIdOpened = "kSettingsLastMemeIdOpened" 15 | let kSettingsResetSettingsOnLaunch = "kResetSettingsOnLaunch" 16 | let kSettingsDarkMode = "kSettingsDarkMode" 17 | let kSettingsViewModeIsGrid = "kMemeListViewModeIsGrid" 18 | let kSettingsLastSortKey = "kLastSortOrderKey" 19 | let kSettingsLastSearchKey = "kLastSearchKey" 20 | 21 | // MARK: - Notifications 22 | 23 | let kFetchCompleteNotification: String = "kFetchCompleteNotification" 24 | 25 | let kToggleViewModeNotification: String = "kToggleViewModeNotification" 26 | let kToggleViewModeKey: String = "kToggleViewModeKey" 27 | 28 | let kResetPositionNotification: String = "kResetPositionNotification" 29 | let kResetAllNotification: String = "kResetAllNotification" 30 | 31 | let kFontBiggerNotification: String = "kFontBiggerNotification" 32 | let kFontSmallerNotification: String = "kFontSmallerNotification" 33 | 34 | let kAlignTextNotification: String = "kAlignTextNotification" 35 | 36 | let kFillDefaultTextNotification: String = "kFillDefaultTextNotification" 37 | 38 | let kTextColorPanelNotification: String = "kTextColorPanelNotification" 39 | let kOutlineColorPanelNotification: String = "kOutlineColorPanelNotification" 40 | 41 | let kUpdateAttributesNotification: String = "kUpdateAttributesNotification" 42 | let kTopAttrName: String = "topAttr" 43 | let kBottomAttrName: String = "bottomAttr" 44 | 45 | let kSearchBarTextChangedNotification: String = "kSearchBarTextChangedNotification" 46 | let kSortModeChangedNotification: String = "kSortModeChangedNotification" 47 | 48 | let kDarkModeChangedNotification: String = "kDarkModeChangedNotification" 49 | 50 | let kShareNotification: String = "kShareNotification" 51 | 52 | let kUndoNotification: String = "kUndoNotification" 53 | let kRedoNotification: String = "kRedoNotification" 54 | 55 | let kPrintNotification: String = "kPrintNotification" 56 | let kOpenNotification: String = "kOpenNotification" 57 | let kSaveNotification: String = "kSaveNotification" 58 | let kNewNotification: String = "kNewNotification" -------------------------------------------------------------------------------- /Meme Maker Mac/Models/MemeFetcher.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MemeFetcher.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/6/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | open class MemeFetcher: NSObject { 12 | 13 | fileprivate var context: NSManagedObjectContext? = nil 14 | 15 | fileprivate var memes = NSMutableArray() 16 | fileprivate var fetchedMemes = NSMutableArray() 17 | 18 | override init() { 19 | super.init() 20 | let appDelegate = NSApplication.shared().delegate as! AppDelegate 21 | context = appDelegate.managedObjectContext 22 | } 23 | 24 | open func fetchMemes() -> Void { 25 | fetchMemes(0) 26 | } 27 | 28 | fileprivate func fetchMemes(_ paging: Int) -> Void { 29 | var request = URLRequest(url: apiMemesPaging(paging)) 30 | request.httpMethod = "GET" 31 | URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in 32 | if (error != nil) { 33 | dump(error) 34 | return 35 | } 36 | if (data != nil) { 37 | do { 38 | let persistentStoreCoordinator = self.context?.persistentStoreCoordinator 39 | let asyncContext: NSManagedObjectContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType) 40 | asyncContext.persistentStoreCoordinator = persistentStoreCoordinator 41 | 42 | let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [String: Any] 43 | // TODO: add proper error checks here to protect against getting an unexpected json format 44 | let code = json!["code"] as! Int 45 | if (code == 200) { 46 | let jsonmemes = json!["data"] as! NSArray 47 | let memesArray = XMeme.getAllMemesFromArray(jsonmemes, context: asyncContext)! 48 | for meme in memesArray { 49 | self.fetchedMemes.add(meme) 50 | } 51 | try asyncContext.save() 52 | DispatchQueue.main.async(execute: { 53 | self.fetchMemes(paging + 1) 54 | }) 55 | } 56 | else { 57 | self.memes = self.fetchedMemes 58 | print("Fetch complete!") 59 | DispatchQueue.main.async(execute: { 60 | SettingsManager.saveLastUpdateDate() 61 | NotificationCenter.default.post(name: Notification.Name(rawValue: kFetchCompleteNotification), object: nil, userInfo: ["memes": self.memes]) 62 | }) 63 | return 64 | } 65 | } 66 | catch _ { 67 | print("Unable to parse") 68 | return 69 | } 70 | } 71 | }).resume() 72 | 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /Meme Maker Mac/Models/SettingsManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingsManager.swift 3 | // Meme Maker 4 | // 5 | // Created by Avikant Saini on 4/5/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | 11 | open class SettingsManager: NSObject { 12 | 13 | fileprivate static let filePath = documentsPathForFileName("prefs") 14 | 15 | // MARK:- Save and fetch stuff 16 | 17 | open class func setObject(_ object: Any, key: String) { 18 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 19 | dict.setObject(object, forKey: key as NSString) 20 | dict.write(toFile: filePath, atomically: true) 21 | } 22 | } 23 | 24 | open class func getObject(_ key: String) -> Any? { 25 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 26 | return dict.object(forKey: key as NSString) 27 | } 28 | return "" as Any? 29 | } 30 | 31 | open class func setBool(_ bool: Bool, key: String) { 32 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 33 | dict.setObject(NSNumber(value: bool as Bool), forKey: key as NSString) 34 | dict.write(toFile: filePath, atomically: true) 35 | } 36 | } 37 | 38 | open class func getBool(_ key: String) -> Bool { 39 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 40 | if let value = dict.object(forKey: key as NSString) as? BooleanLiteralType { 41 | return Bool(value) 42 | } 43 | } 44 | return false 45 | } 46 | 47 | open class func setInteger(_ value: Int, key: String) { 48 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 49 | dict.setObject(NSNumber.init(value: value as Int), forKey: key as NSString) 50 | dict.write(toFile: filePath, atomically: true) 51 | } 52 | } 53 | 54 | open class func getInteger(_ key: String) -> Int { 55 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 56 | if let value = dict.object(forKey: key as NSString) as? IntegerLiteralType { 57 | return Int(value) 58 | } 59 | } 60 | return 0 61 | } 62 | 63 | open class func setFloat(_ value: Float, key: String) { 64 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 65 | dict.setObject(NSNumber.init(value: value as Float), forKey: key as NSString) 66 | dict.write(toFile: filePath, atomically: true) 67 | } 68 | } 69 | 70 | open class func getFloat(_ key: String) -> Float { 71 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 72 | if let value = dict.object(forKey: key as NSString) as? FloatLiteralType { 73 | return Float(value) 74 | } 75 | } 76 | return 0.0 77 | } 78 | 79 | open class func deleteObject(_ key: String) { 80 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 81 | dict.removeObject(forKey: key as NSString) 82 | dict.write(toFile: filePath, atomically: true) 83 | } 84 | } 85 | 86 | open class func saveLastUpdateDate() -> Void { 87 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 88 | let formatter = DateFormatter() 89 | formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 90 | let date = formatter.string(from: Date()) 91 | dict.setObject(date, forKey: "lastUpdateDate" as NSString) 92 | dict.write(toFile: filePath, atomically: true) 93 | } 94 | } 95 | 96 | open class func getLastUpdateDate() -> Date { 97 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 98 | if let date = dict.object(forKey: "lastUpdateDate") { 99 | let dateString = "\(date as! String)" 100 | let formatter = DateFormatter() 101 | formatter.dateFormat = "yyyy-MM-dd HH:mm:ss" 102 | let date = formatter.date(from: dateString) 103 | return date! 104 | } 105 | } 106 | return Date(timeIntervalSinceNow: (-10 * 86400)) 107 | } 108 | 109 | open class func getLastUpdateDateString() -> String { 110 | if let dict = NSMutableDictionary(contentsOfFile: filePath) { 111 | if let _ = dict.object(forKey: "lastUpdateDate") { 112 | let formatter = DateFormatter() 113 | formatter.dateFormat = "MMM dd, yyyy hh:mm a" 114 | let date = self.getLastUpdateDate() 115 | return formatter.string(from: date) 116 | } 117 | } 118 | return "" 119 | } 120 | 121 | } 122 | -------------------------------------------------------------------------------- /Meme Maker Mac/Models/XMeme+CoreDataProperties.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XMeme+CoreDataProperties.swift 3 | // Meme Maker 4 | // 5 | // Created by Avikant Saini on 4/4/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | // Choose "Create NSManagedObject Subclass…" from the Core Data editor menu 9 | // to delete and recreate this implementation file for your updated model. 10 | // 11 | 12 | import Foundation 13 | import CoreData 14 | 15 | extension XMeme { 16 | 17 | @NSManaged var memeID: Int32 18 | @NSManaged var name: String? 19 | @NSManaged var topText: String? 20 | @NSManaged var bottomText: String? 21 | @NSManaged var tags: String? 22 | @NSManaged var image: String? 23 | @NSManaged var detail: String? 24 | @NSManaged var thumb: String? 25 | @NSManaged var rank: Int32 26 | @NSManaged var created: NSOrderedSet? 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Meme Maker Mac/Models/XMeme.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XMeme.swift 3 | // Meme Maker 4 | // 5 | // Created by Avikant Saini on 4/4/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import CoreData 11 | 12 | class XMeme: NSManagedObject { 13 | 14 | var imageURL: URL? 15 | 16 | class func createOrUpdateMemeWithData(_ data: NSDictionary, context: NSManagedObjectContext) -> XMeme { 17 | 18 | let ID: Int = ((data.object(forKey: "ID") as AnyObject).intValue)! 19 | 20 | let fetchRequest = NSFetchRequest(entityName: "XMeme") 21 | fetchRequest.predicate = NSPredicate(format: "memeID == %li", ID) 22 | 23 | var meme: XMeme! 24 | 25 | do { 26 | let fetchedArray = try context.fetch(fetchRequest) 27 | if (fetchedArray.count > 0) { 28 | // print("Meme \(ID) already present.") 29 | meme = fetchedArray.first as! XMeme 30 | } 31 | else { 32 | // print("Inserting meme \(ID).") 33 | meme = NSEntityDescription.insertNewObject(forEntityName: "XMeme", into: context) as! XMeme 34 | meme.memeID = data.object(forKey: "ID") as! Int32 35 | } 36 | } 37 | catch _ { 38 | 39 | } 40 | 41 | meme.name = data.object(forKey: "name") as? String 42 | meme.topText = data.object(forKey: "topText") as? String 43 | meme.bottomText = data.object(forKey: "bottomText") as? String 44 | meme.tags = data.object(forKey: "tags") as? String 45 | meme.detail = data.object(forKey: "detail") as? String 46 | meme.image = data.object(forKey: "image") as? String 47 | meme.imageURL = URL(string: meme.image!) 48 | meme.thumb = data.object(forKey: "thumb") as? String 49 | meme.rank = data.object(forKey: "rank") as! Int32 50 | 51 | return meme 52 | 53 | } 54 | 55 | class func getAllMemesFromArray(_ array: NSArray, context: NSManagedObjectContext) -> NSArray? { 56 | 57 | let memesArray: NSMutableArray = NSMutableArray() 58 | 59 | for dict in array { 60 | 61 | let meme = self.createOrUpdateMemeWithData(dict as! NSDictionary, context: context) 62 | memesArray.add(meme) 63 | 64 | } 65 | 66 | return memesArray 67 | 68 | } 69 | 70 | override var description: String { 71 | return "XMeme\t| \(self.memeID)\t| \(self.name!)" 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /Meme Maker Mac/Models/XUndoManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XUndoManager.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 7/7/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | import Foundation 11 | 12 | class XUndoManager: NSObject { 13 | 14 | fileprivate static let sharedInstance = XUndoManager() 15 | 16 | fileprivate var topAttrStack: [XTextAttributes] = [] 17 | fileprivate var bottomAttrStack: [XTextAttributes] = [] 18 | 19 | fileprivate var index: Int = -1 20 | 21 | class func sharedManager() -> XUndoManager { 22 | return sharedInstance 23 | } 24 | 25 | func append(_ topAttr: XTextAttributes, bottomAttr: XTextAttributes) -> Void { 26 | topAttrStack.append(topAttr) 27 | bottomAttrStack.append(bottomAttr) 28 | index += 1 29 | if (topAttrStack.count > 100) { 30 | topAttrStack.removeFirst() 31 | index = 99 32 | } 33 | if (bottomAttrStack.count > 100) { 34 | bottomAttrStack.removeFirst() 35 | index = 99 36 | } 37 | } 38 | 39 | func undo() -> (topAttr: XTextAttributes?, bottomAttr: XTextAttributes?) { 40 | index -= 1 41 | if (index < 0) { 42 | index = -1 43 | return (nil, nil) 44 | } 45 | return (topAttrStack[index], bottomAttrStack[index]) 46 | } 47 | 48 | func redo() -> (topAttr: XTextAttributes?, bottomAttr: XTextAttributes?) { 49 | index += 1 50 | if (index > topAttrStack.count - 1) { 51 | removeAll() 52 | index = topAttrStack.count - 1 53 | return (nil, nil) 54 | } 55 | return (topAttrStack[index], bottomAttrStack[index]) 56 | } 57 | 58 | func stackTop() -> (topAttr: XTextAttributes?, bottomAttr: XTextAttributes?) { 59 | if (index < 0 || index >= topAttrStack.count) { 60 | return (nil, nil) 61 | } 62 | return (topAttrStack[index], bottomAttrStack[index]) 63 | } 64 | 65 | func removeAll() -> Void { 66 | index = -1; 67 | topAttrStack.removeAll() 68 | bottomAttrStack.removeAll() 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/Default/defaultMemes.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MemeMaker/Meme-Maker-Mac/e22856964c760a2ac414fdbec5206080fdc6a0fd/Meme Maker Mac/Supporting Files/Default/defaultMemes.zip -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/DragDropImageView/DragDropImageView.h: -------------------------------------------------------------------------------- 1 | /* 2 | File: DragDropImageView.h 3 | Abstract: Custom subclass of NSImageView with support for drag and drop operations. 4 | Version: 1.1 5 | 6 | Copyright (C) 2011 Apple Inc. All Rights Reserved. 7 | 8 | */ 9 | 10 | #import 11 | #import 12 | 13 | @protocol DragDropImageViewDelegate; 14 | 15 | @interface DragDropImageView : NSImageView 16 | { 17 | //highlight the drop zone 18 | BOOL highlight; 19 | } 20 | 21 | @property (nonatomic, copy) NSString *memeName; 22 | 23 | @property (assign) BOOL allowDrag; 24 | @property (assign) BOOL allowDrop; 25 | @property (assign) id delegate; 26 | 27 | - (id)initWithCoder:(NSCoder *)coder; 28 | 29 | @end 30 | 31 | @protocol DragDropImageViewDelegate 32 | 33 | - (void)dragDropImageView:(DragDropImageView *)imageView didFinishDropAtFilePath:(NSString *)filePath andImage:(NSImage *)image; 34 | 35 | @end -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRSeparatorLineView.h: -------------------------------------------------------------------------------- 1 | // 2 | // GRSeparatorLineView.h 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface GRSeparatorLineView : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRSeparatorLineView.m: -------------------------------------------------------------------------------- 1 | // 2 | // GRSeparatorLineView.m 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import "GRSeparatorLineView.h" 10 | 11 | @implementation GRSeparatorLineView 12 | 13 | - (void)drawRect:(NSRect)dirtyRect { 14 | [super drawRect:dirtyRect]; 15 | 16 | // NSColor *lineColor = [[NSColor secondaryLabelColor] colorUsingColorSpace:[NSColorSpace deviceRGBColorSpace]]; 17 | // [[NSColor colorWithRed:lineColor.redComponent green:lineColor.greenComponent blue:lineColor.blueComponent alpha:0.5] setFill]; 18 | // 19 | // NSRectFill(dirtyRect); 20 | } 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // GRVibrantTitleView.h 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface GRVibrantTitleView : NSView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitleView.m: -------------------------------------------------------------------------------- 1 | // 2 | // GRVibrantTitleView.m 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import "GRVibrantTitleView.h" 10 | 11 | static void *_windowTitleObservationContext = &_windowTitleObservationContext; 12 | 13 | @interface GRVibrantTitleView () 14 | 15 | @property (nonatomic, copy) NSString *title; 16 | 17 | @end 18 | 19 | @implementation GRVibrantTitleView 20 | 21 | - (void)viewDidMoveToWindow 22 | { 23 | // update the title when we get moved into a window 24 | self.title = self.window.title; 25 | 26 | // add ourselves as an observer so every time the title of the window changes we are notified about it 27 | [self.window addObserver:self forKeyPath:@"title" options:NSKeyValueObservingOptionNew context:_windowTitleObservationContext]; 28 | } 29 | 30 | - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 31 | { 32 | if (context != _windowTitleObservationContext) return [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; 33 | 34 | self.title = self.window.title; 35 | } 36 | 37 | #define kTextAlignmentPadding 50.0 38 | - (void)drawRect:(NSRect)dirtyRect { 39 | [super drawRect:dirtyRect]; 40 | 41 | NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init]; 42 | // this will make the text truncate when the titlebar gets too small 43 | pStyle.lineBreakMode = NSLineBreakByTruncatingTail; 44 | // this will center the text 45 | pStyle.alignment = NSCenterTextAlignment; 46 | 47 | // make a dictionary of attributes for our title text 48 | NSDictionary *attributes = @{NSFontAttributeName: [NSFont titleBarFontOfSize:13.0], 49 | NSParagraphStyleAttributeName: pStyle, 50 | // with vibrancy, the labelColor will vary depending on the background contents 51 | NSForegroundColorAttributeName: [NSColor labelColor]}; 52 | 53 | NSAttributedString *textString = [[NSAttributedString alloc] initWithString:self.title attributes:attributes]; 54 | 55 | // voodoo 56 | NSRect textRect = NSMakeRect(0, 0, NSWidth(self.bounds)-kTextAlignmentPadding, NSHeight(self.bounds)); 57 | CGFloat widthDiff = self.bounds.size.width-textString.size.width; 58 | if (widthDiff <= kTextAlignmentPadding && widthDiff > 0) { 59 | textRect.size.width += kTextAlignmentPadding-widthDiff; 60 | } 61 | 62 | // draw :) 63 | [textString drawInRect:textRect]; 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitlebarView.h: -------------------------------------------------------------------------------- 1 | // 2 | // GRTitlebarView.h 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class GRVibrantTitleView; 12 | 13 | @interface GRVibrantTitlebarView : NSVisualEffectView 14 | 15 | @property (nonatomic, strong) GRVibrantTitleView *titleView; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitlebarView.m: -------------------------------------------------------------------------------- 1 | // 2 | // GRTitlebarView.m 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import "GRVibrantTitlebarView.h" 10 | 11 | #import "GRVibrantTitleView.h" 12 | #import "GRSeparatorLineView.h" 13 | 14 | @interface GRVibrantTitlebarView () 15 | 16 | @property (nonatomic, strong) GRSeparatorLineView *lineView; 17 | 18 | @end 19 | 20 | @implementation GRVibrantTitlebarView 21 | 22 | #define kTitleTopOffset 2.0 23 | #define kTitleLeftOffset 70.0 24 | #define kTitleHeight 14.0 25 | - (instancetype)initWithFrame:(NSRect)frameRect 26 | { 27 | self = [super initWithFrame:frameRect]; 28 | 29 | if (!self) return nil; 30 | 31 | self.lineView = [[GRSeparatorLineView alloc] initWithFrame:NSMakeRect(0, 0, NSWidth(self.frame), 1.0)]; 32 | self.lineView.autoresizingMask = NSViewWidthSizable|NSViewMaxYMargin; 33 | [self addSubview:self.lineView]; 34 | 35 | self.titleView = [[GRVibrantTitleView alloc] initWithFrame:NSMakeRect(kTitleLeftOffset, NSHeight(self.frame)-kTitleHeight-kTitleTopOffset, NSWidth(self.frame)-kTitleLeftOffset, kTitleHeight)]; 36 | self.titleView.autoresizingMask = NSViewWidthSizable|NSViewMinYMargin; 37 | [self addSubview:self.titleView]; 38 | 39 | [[NSNotificationCenter defaultCenter] addObserverForName:@"kDarkModeChangedNotification" object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { 40 | if ([[note.userInfo objectForKey:@"darkMode"] boolValue]) { 41 | self.material = NSVisualEffectMaterialDark; 42 | } else { 43 | self.material = NSVisualEffectMaterialLight; 44 | } 45 | self.needsLayout = YES; 46 | }]; 47 | 48 | return self; 49 | } 50 | 51 | - (void)mouseDragged:(NSEvent *)theEvent 52 | { 53 | NSWindow *window = self.window; 54 | if (window.isMovableByWindowBackground || (window.styleMask & NSFullScreenWindowMask) == NSFullScreenWindowMask) { 55 | [super mouseDragged:theEvent]; 56 | return; 57 | } 58 | 59 | NSPoint where = [window convertRectToScreen:NSMakeRect(theEvent.locationInWindow.x, theEvent.locationInWindow.y, 0, 0)].origin; 60 | NSPoint origin = window.frame.origin; 61 | CGFloat deltaX = 0.0; 62 | CGFloat deltaY = 0.0; 63 | while ((theEvent = [NSApp nextEventMatchingMask:NSLeftMouseDownMask | NSLeftMouseDraggedMask | NSLeftMouseUpMask untilDate:[NSDate distantFuture] inMode:NSEventTrackingRunLoopMode dequeue:YES]) && (theEvent.type != NSLeftMouseUp)) { 64 | @autoreleasepool { 65 | NSPoint now = [window convertRectToScreen:NSMakeRect(theEvent.locationInWindow.x, theEvent.locationInWindow.y, 0, 0)].origin; 66 | deltaX += now.x - where.x; 67 | deltaY += now.y - where.y; 68 | if (fabs(deltaX) >= 1 || fabs(deltaY) >= 1) { 69 | // This part is only called if drag occurs on container view! 70 | origin.x += deltaX; 71 | origin.y += deltaY; 72 | window.frameOrigin = origin; 73 | deltaX = 0.0; 74 | deltaY = 0.0; 75 | } 76 | where = now; // this should be inside above if but doing that results in jittering while moving the window... 77 | } 78 | } 79 | } 80 | 81 | @end 82 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitlebarWindow.h: -------------------------------------------------------------------------------- 1 | // 2 | // GRVibrantTitlebarWindow.h 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface GRVibrantTitlebarWindow : NSWindow 12 | 13 | /** 14 | Set whether the window's vibrant titlebar should be hidden when the window enters fullscreen mode 15 | */ 16 | @property (nonatomic, assign) BOOL hidesTitlebarWhenFullscreen; 17 | 18 | /** 19 | Set the titlebar's appearance (use NSAppearanceNameVibrantLight or NSAppearanceNameVibrantDark) 20 | */ 21 | @property (nonatomic, assign) NSAppearance *titlebarAppearance; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/GRVibrantTitlebarWindow/GRVibrantTitlebarWindow.m: -------------------------------------------------------------------------------- 1 | // 2 | // GRVibrantTitlebarWindow.m 3 | // Visual Experiments 4 | // 5 | // Created by Guilherme Rambo on 23/08/14. 6 | // Copyright (c) 2014 Guilherme Rambo. All rights reserved. 7 | // 8 | 9 | #import "GRVibrantTitlebarWindow.h" 10 | 11 | #import "GRVibrantTitlebarView.h" 12 | #import "GRVibrantTitleView.h" 13 | 14 | #define WHEIGHT NSHeight(self.frame) 15 | #define WWIDTH NSWidth(self.frame) 16 | 17 | @interface GRVibrantTitlebarWindow () 18 | 19 | @property (nonatomic, assign) NSWindowTitleVisibility internalTitleVisibility; 20 | @property (nonatomic, strong) GRVibrantTitlebarView *titlebarView; 21 | 22 | @end 23 | 24 | @implementation GRVibrantTitlebarWindow 25 | 26 | - (void)awakeFromNib 27 | { 28 | [super awakeFromNib]; 29 | 30 | self.styleMask |= NSFullSizeContentViewWindowMask; 31 | self.titlebarAppearsTransparent = YES; 32 | 33 | [self setupTitlebar]; 34 | 35 | // [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillEnterFullScreenNotification object:self queue:nil usingBlock:^(NSNotification *note) { 36 | // if (self.hidesTitlebarWhenFullscreen) [self.titlebarView setHidden:YES]; 37 | // }]; 38 | // 39 | // [[NSNotificationCenter defaultCenter] addObserverForName:NSWindowWillExitFullScreenNotification object:self queue:nil usingBlock:^(NSNotification *note) { 40 | // if (self.hidesTitlebarWhenFullscreen) [self.titlebarView setHidden:NO]; 41 | // }]; 42 | 43 | // defaults 44 | self.titleVisibility = NSWindowTitleVisible; 45 | self.titlebarAppearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]; 46 | self.hidesTitlebarWhenFullscreen = NO; 47 | 48 | [[NSNotificationCenter defaultCenter] addObserverForName:@"kDarkModeChangedNotification" object:nil queue:NSOperationQueue.mainQueue usingBlock:^(NSNotification * _Nonnull note) { 49 | if ([[note.userInfo objectForKey:@"darkMode"] boolValue]) { 50 | self.titlebarAppearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]; 51 | } else { 52 | self.titlebarAppearance = [NSAppearance appearanceNamed:NSAppearanceNameVibrantLight]; 53 | } 54 | }]; 55 | } 56 | 57 | - (void)setupTitlebar { 58 | if (self.titlebarView) return; 59 | // create a vibrant titlebar view and put it in the window 60 | self.titlebarView = [[GRVibrantTitlebarView alloc] initWithFrame:NSMakeRect(0, WHEIGHT - 24, WWIDTH, 24)]; 61 | self.titlebarView.autoresizingMask = NSViewMinYMargin|NSViewWidthSizable; 62 | self.titlebarView.blendingMode = NSVisualEffectBlendingModeBehindWindow; 63 | [self.contentView addSubview:self.titlebarView]; 64 | } 65 | 66 | - (NSRect)window:(NSWindow *)window willPositionSheet:(NSWindow *)sheet usingRect:(NSRect)rect { 67 | rect.origin.y += 60; 68 | return rect; 69 | } 70 | 71 | -(void)windowWillBeginSheet:(nonnull NSNotification *)notification { 72 | NSLog(@"Presented Sheet"); 73 | } 74 | 75 | #pragma mark Setters 76 | 77 | - (void)setTitlebarAppearance:(NSAppearance *)titlebarAppearance { 78 | self.titlebarView.appearance = titlebarAppearance; 79 | } 80 | 81 | - (void)setTitleVisibility:(NSWindowTitleVisibility)titleVisibility { 82 | self.internalTitleVisibility = titleVisibility; 83 | [super setTitleVisibility:NSWindowTitleHidden]; 84 | } 85 | 86 | - (void)setInternalTitleVisibility:(NSWindowTitleVisibility)internalTitleVisibility { 87 | _internalTitleVisibility = internalTitleVisibility; 88 | self.titlebarView.titleView.hidden = (self.internalTitleVisibility == NSWindowTitleHidden) ? YES : NO; 89 | } 90 | 91 | @end 92 | -------------------------------------------------------------------------------- /Meme Maker Mac/Supporting Files/PrefixHeader.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 5/23/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | let API_BASE_URL: String = "http://alpha-meme-maker.herokuapp.com" 12 | 13 | func apiMemesPaging(_ page: Int) -> URL { 14 | return URL(string: "\(API_BASE_URL)/\(page)/")! 15 | } 16 | 17 | func apiParticularMeme(_ memeID: Int) -> URL { 18 | return URL(string: "\(API_BASE_URL)/memes/\(memeID)/")! 19 | } 20 | 21 | func apiSubmissionsPaging(_ page: Int) -> URL { 22 | return URL(string: "\(API_BASE_URL)/submissions/\(page)/")! 23 | } 24 | 25 | func apiSubmissionsForMeme(_ memeID: Int) -> URL { 26 | return URL(string: "\(API_BASE_URL)/memes/\(memeID)/submissions/")! 27 | } 28 | 29 | func getDocumentsDirectory() -> String { 30 | let paths = NSSearchPathForDirectoriesInDomains(.applicationSupportDirectory, .userDomainMask, true) 31 | let documentsDirectory = paths[0] 32 | return documentsDirectory 33 | } 34 | 35 | func imagesPathForFileName(_ name: String) -> String { 36 | let directoryPath = getDocumentsDirectory() + "/images/" 37 | let manager = FileManager.default 38 | if (!manager.fileExists(atPath: directoryPath)) { 39 | do { 40 | try manager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) 41 | } catch _ { } 42 | } 43 | return directoryPath + "\(name).jpg" 44 | } 45 | 46 | func getImagesFolder() -> String { 47 | let directoryPath = getDocumentsDirectory() + "/images/" 48 | let manager = FileManager.default 49 | if (!manager.fileExists(atPath: directoryPath)) { 50 | do { 51 | try manager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) 52 | } catch _ { } 53 | } 54 | return directoryPath 55 | } 56 | 57 | func userImagesPathForFileName(_ name: String) -> String { 58 | let directoryPath = getDocumentsDirectory() + "/userImages/" 59 | let manager = FileManager.default 60 | if (!manager.fileExists(atPath: directoryPath)) { 61 | do { 62 | try manager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) 63 | } catch _ { } 64 | } 65 | return directoryPath + "\(name).jpg" 66 | } 67 | 68 | func documentsPathForFileName(_ name: String) -> String { 69 | let directoryPath = getDocumentsDirectory() + "/resources/" 70 | let manager = FileManager.default 71 | if (!manager.fileExists(atPath: directoryPath)) { 72 | do { 73 | try manager.createDirectory(atPath: directoryPath, withIntermediateDirectories: true, attributes: nil) 74 | } catch _ { } 75 | } 76 | return directoryPath + "\(name).dat" 77 | } 78 | 79 | func saveLastImage(_ image: NSImage) -> Void { 80 | let bitmapImageRep = NSBitmapImageRep(data: image.tiffRepresentation!) 81 | if let data = bitmapImageRep?.representation(using: .JPEG, properties: [NSImageCompressionFactor: NSNumber.init(value: 0.7 as Float)]) { 82 | try? data.write(to: URL(fileURLWithPath: userImagesPathForFileName("lastImage")), options: [.atomic]) 83 | } 84 | } 85 | 86 | func getLastImage() -> NSImage? { 87 | if let image = NSImage(contentsOfFile: userImagesPathForFileName("lastImage")) { 88 | return image 89 | } 90 | return nil 91 | } 92 | 93 | -------------------------------------------------------------------------------- /Meme Maker Mac/Views/Cells/BaseCollectionViewItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BaseCollectionViewItem.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 5/23/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import CoreGraphics 11 | 12 | class BaseCollectionViewItem: NSCollectionViewItem { 13 | 14 | var meme: XMeme? { 15 | didSet { 16 | if let meme = meme { 17 | updateImageView() 18 | textField?.stringValue = "\(meme.name!)" 19 | } 20 | } 21 | } 22 | 23 | var gray: Bool = false { 24 | didSet { 25 | updateBackground() 26 | } 27 | } 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | self.view.wantsLayer = true 32 | } 33 | 34 | func updateBackground() -> Void { 35 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 36 | let pc = darkMode ? 82.0 : 212.0 as CGFloat 37 | let ac = pc + 30.0 as CGFloat 38 | if gray { 39 | self.view.layer?.backgroundColor = NSColor(red: pc/255, green: pc/255, blue: pc/255, alpha: 0.3).cgColor 40 | } else { 41 | self.view.layer?.backgroundColor = NSColor(red: ac/255, green: ac/255, blue: ac/255, alpha: 0.3).cgColor 42 | } 43 | } 44 | 45 | } 46 | 47 | // MARK: - Downloading and updation 48 | 49 | extension BaseCollectionViewItem { 50 | 51 | func updateImageView() -> Void { 52 | let filePath = imagesPathForFileName("\(self.meme!.memeID)") 53 | let filePathS = imagesPathForFileName("\(self.meme!.memeID)s") 54 | if (FileManager.default.fileExists(atPath: filePath)) { 55 | if let image = NSImage.init(contentsOfFile: filePathS) { 56 | imageView?.image = image 57 | } 58 | else { 59 | if let image = NSImage.init(contentsOfFile: filePath) { 60 | let squareImage = squareImageFromImage(image) 61 | let bitmapImageRep = NSBitmapImageRep(data: squareImage.tiffRepresentation!) 62 | if let data = bitmapImageRep?.representation(using: .JPEG, properties: [NSImageCompressionFactor: NSNumber.init(value: 0.7 as Float)]) { 63 | try? data.write(to: URL(fileURLWithPath: filePathS), options: [.atomic]) 64 | } 65 | imageView?.image = squareImage; 66 | } 67 | } 68 | } else { 69 | self.imageView?.image = NSImage(named: "MemeBlank") 70 | if let URLString = meme?.image { 71 | if let URL = URL(string: URLString) { 72 | print("Downloading image \'\(meme!.memeID)\'") 73 | self.downloadImageWithURL(URL, filePath: filePath) 74 | } 75 | } 76 | } 77 | } 78 | 79 | func downloadImageWithURL(_ URL: Foundation.URL, filePath: String) -> Void { 80 | 81 | URLSession.shared.dataTask(with: URL, completionHandler: { (data, response, error) in 82 | if (error == nil) { 83 | if let data = data { 84 | try? data.write(to: Foundation.URL(fileURLWithPath: filePath), options: [.atomic]) 85 | DispatchQueue.main.async(execute: { 86 | self.updateImageView() 87 | }) 88 | } 89 | } 90 | }) .resume() 91 | } 92 | 93 | } 94 | 95 | // MARK: - Cropping utils 96 | 97 | extension BaseCollectionViewItem { 98 | 99 | func squareImageFromImage(_ image: NSImage) -> NSImage { 100 | let minwh = Double(min(image.size.width, image.size.height)) 101 | return cropToBounds(image, width: minwh, height: minwh) 102 | } 103 | 104 | func cropToBounds(_ image: NSImage, width: Double, height: Double) -> NSImage { 105 | var imageRect = CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height) 106 | let contextImage: NSImage = NSImage.init(cgImage: image.cgImage(forProposedRect: &imageRect, context: nil, hints: nil)!, size: imageRect.size) 107 | let contextSize: CGSize = contextImage.size 108 | var posX: CGFloat = 0.0 109 | var posY: CGFloat = 0.0 110 | var cgwidth: CGFloat = CGFloat(width) 111 | var cgheight: CGFloat = CGFloat(height) 112 | // See what size is longer and create the center off of that 113 | if contextSize.width > contextSize.height { 114 | posX = ((contextSize.width - contextSize.height) / 2) 115 | posY = 0 116 | cgwidth = contextSize.height 117 | cgheight = contextSize.height 118 | } 119 | else { 120 | posX = 0 121 | posY = ((contextSize.height - contextSize.width) / 2) 122 | cgwidth = contextSize.width 123 | cgheight = contextSize.width 124 | } 125 | let rect: CGRect = CGRect(x: posX, y: posY, width: cgwidth, height: cgheight) 126 | // Create bitmap image from context using the rect 127 | let imageRef: CGImage = contextImage.cgImage(forProposedRect: &imageRect, context: nil, hints: nil)!.cropping(to: rect)! 128 | // Create a new image based on the imageRef and rotate back to the original orientation 129 | let image: NSImage = NSImage.init(cgImage: imageRef, size: rect.size) 130 | return image 131 | } 132 | 133 | func setHighlight(_ selected: Bool) { 134 | // Must be overridde in subclass 135 | } 136 | 137 | } 138 | -------------------------------------------------------------------------------- /Meme Maker Mac/Views/Cells/GridCollectionViewItem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GridCollectionViewItem.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 5/20/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class GridCollectionViewItem: BaseCollectionViewItem { 12 | 13 | override func viewDidLoad() { 14 | 15 | super.viewDidLoad() 16 | // Do view setup here. 17 | 18 | view.wantsLayer = true 19 | 20 | // Customize layer 21 | view.layer?.backgroundColor = NSColor.clear.cgColor 22 | view.layer?.borderWidth = 0.0 23 | view.layer?.borderColor = NSColor.white.cgColor 24 | 25 | } 26 | 27 | override func setHighlight(_ selected: Bool) { 28 | view.layer?.borderWidth = selected ? 3.0 : 0.0 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /Meme Maker Mac/Views/Cells/GridCollectionViewItem.xib: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /Meme Maker Mac/Views/Cells/ListCollectionViewItel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ListCollectionViewItel.swift 3 | // Meme Maker Mac 4 | // 5 | // Created by Avikant Saini on 5/20/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class ListCollectionViewItel: BaseCollectionViewItem { 12 | 13 | override func viewDidLoad() { 14 | 15 | super.viewDidLoad() 16 | // Do view setup here. 17 | 18 | view.wantsLayer = true 19 | 20 | // Customize layer 21 | view.layer?.backgroundColor = NSColor.clear.cgColor 22 | view.layer?.borderWidth = 0.0 23 | view.layer?.borderColor = NSColor.lightGray.cgColor 24 | 25 | } 26 | 27 | override func viewDidAppear() { 28 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 29 | self.textField?.textColor = darkMode ? NSColor.init(white: 0.95, alpha: 1) : NSColor.init(white: 0.25, alpha: 1) 30 | 31 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: kDarkModeChangedNotification), object: nil, queue: OperationQueue.main) { (notification) in 32 | let darkMode = SettingsManager.getBool(kSettingsDarkMode) 33 | self.textField?.textColor = darkMode ? NSColor.init(white: 0.95, alpha: 1) : NSColor.init(white: 0.25, alpha: 1) 34 | } 35 | } 36 | 37 | override func setHighlight(_ selected: Bool) { 38 | view.layer?.borderWidth = selected ? 3.0 : 0.0 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /Meme Maker Mac/Views/Cells/ListCollectionViewItel.xib: -------------------------------------------------------------------------------- 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 | -------------------------------------------------------------------------------- /Meme Maker MacTests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Meme Maker MacTests/Meme_Maker_MacTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Meme_Maker_MacTests.swift 3 | // Meme Maker MacTests 4 | // 5 | // Created by Avikant Saini on 5/20/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Meme_Maker_Mac 11 | 12 | class Meme_Maker_MacTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Meme Maker MacUITests/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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Meme Maker MacUITests/Meme_Maker_MacUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Meme_Maker_MacUITests.swift 3 | // Meme Maker MacUITests 4 | // 5 | // Created by Avikant Saini on 5/20/16. 6 | // Copyright © 2016 avikantz. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class Meme_Maker_MacUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /Meme Maker.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Meme Maker.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /Meme Maker.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/Meme Maker Mac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /Meme Maker.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Meme Maker Mac.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 59490AC41CEF274A00679BE2 16 | 17 | primary 18 | 19 | 20 | 59490AD81CEF274A00679BE2 21 | 22 | primary 23 | 24 | 25 | 59490AE31CEF274A00679BE2 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Meme Maker.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '8.0' 3 | # Uncomment this line if you're using Swift 4 | use_frameworks! 5 | 6 | target 'Meme Maker' do 7 | 8 | pod 'SSZipArchive' 9 | 10 | end 11 | 12 | target 'Meme MakerTests' do 13 | 14 | end 15 | 16 | target 'Meme MakerUITests' do 17 | 18 | end 19 | 20 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SSZipArchive (1.1) 3 | 4 | DEPENDENCIES: 5 | - SSZipArchive 6 | 7 | SPEC CHECKSUMS: 8 | SSZipArchive: de3d215ab73f87db627f81f2ce24f1731e3886c3 9 | 10 | PODFILE CHECKSUM: 147f69fffcba2b647b839febb274714f2ff63fac 11 | 12 | COCOAPODS: 1.0.1 13 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SSZipArchive (1.1) 3 | 4 | DEPENDENCIES: 5 | - SSZipArchive 6 | 7 | SPEC CHECKSUMS: 8 | SSZipArchive: de3d215ab73f87db627f81f2ce24f1731e3886c3 9 | 10 | PODFILE CHECKSUM: 147f69fffcba2b647b839febb274714f2ff63fac 11 | 12 | COCOAPODS: 1.0.1 13 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/Pods-Meme Maker Mac.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/Pods-Meme Maker MacTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/Pods-Meme Maker MacUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/SSZipArchive.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Avikant.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-Meme Maker Mac.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 2 13 | 14 | Pods-Meme Maker MacTests.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 3 20 | 21 | Pods-Meme Maker MacUITests.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 4 27 | 28 | Pods-Meme Maker.xcscheme 29 | 30 | orderHint 31 | 1 32 | 33 | Pods-Meme MakerTests.xcscheme 34 | 35 | orderHint 36 | 6 37 | 38 | Pods-Meme MakerUITests.xcscheme 39 | 40 | orderHint 41 | 7 42 | 43 | SSZipArchive.xcscheme 44 | 45 | isShown 46 | 47 | orderHint 48 | 5 49 | 50 | 51 | SuppressBuildableAutocreation 52 | 53 | 075D9E2F6D0AE84C443C10791963F10B 54 | 55 | primary 56 | 57 | 58 | 1C8373D42E244EA2DCE343DAFE1CA220 59 | 60 | primary 61 | 62 | 63 | 6BE6C25898F96459CB19B0C54A774FB6 64 | 65 | primary 66 | 67 | 68 | 7354EEC5DCE87B4427F9860BA356EBC3 69 | 70 | primary 71 | 72 | 73 | 78884C48FCA8B19762194F395AE8CB32 74 | 75 | primary 76 | 77 | 78 | 920CAEAD61C03DEB9187EBB58E298C08 79 | 80 | primary 81 | 82 | 83 | C5BE30E61CAE609BCD986E8B947B35A1 84 | 85 | primary 86 | 87 | 88 | ED9D02D62160EA2557EC7484450C9CBA 89 | 90 | primary 91 | 92 | 93 | 94 | 95 | 96 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2010-2015, Sam Soffes, http://soff.es 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/README.md: -------------------------------------------------------------------------------- 1 | 2 | # SSZipArchive 3 | 4 | ZipArchive is a simple utility class for zipping and unzipping files on iOS and Mac. 5 | 6 | - Unzip zip files; 7 | - Unzip password protected zip files; 8 | - Create new zip files; 9 | - Append to existing zip files; 10 | - Zip files; 11 | - Zip-up NSData instances. (with a filename) 12 | 13 | ## Installation and Setup 14 | 15 | ### CocoaPods 16 | 17 | `pod install SSZipArchive` 18 | 19 | ### Carthage 20 | `github "ZipArchive/ZipArchive"` 21 | 22 | ### Manual 23 | 24 | 1. Add the `SSZipArchive` and `minizip` folders to your project. 25 | 2. Add the `libz` library to your target 26 | 27 | SSZipArchive requires ARC. 28 | 29 | ## Usage 30 | 31 | ### Objective-C 32 | 33 | ```objective-c 34 | // Create 35 | [SSZipArchive createZipFileAtPath: zipPath withContentsOfDirectory: sampleDataPath]; 36 | 37 | // Unzip 38 | [SSZipArchive unzipFileAtPath:zipPath toDestination: unzipPath]; 39 | ``` 40 | 41 | ### Swift 42 | 43 | ```swift 44 | // Create 45 | SSZipArchive.createZipFileAtPath(zipPath, withContentsOfDirectory: sampleDataPath) 46 | 47 | // Unzip 48 | SSZipArchive.unzipFileAtPath(zipPath, toDestination: unzipPath) 49 | ``` 50 | 51 | ## License 52 | 53 | SSZipArchive is protected under the [MIT license](https://github.com/samsoffes/ssziparchive/raw/master/LICENSE) and our slightly modified version of [Minizip](http://www.winimage.com/zLibDll/minizip.html) 1.1 is licensed under the [Zlib license](http://www.zlib.net/zlib_license.html). 54 | 55 | ## Acknowledgments 56 | 57 | Big thanks to [aish](http://code.google.com/p/ziparchive) for creating [ZipArchive](http://code.google.com/p/ziparchive). The project that inspired SSZipArchive. Thank you [@randomsequence](https://github.com/randomsequence) for implementing the creation support tech and to [@johnezang](https://github.com/johnezang) for all his amazing help along the way. 58 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/Common.h: -------------------------------------------------------------------------------- 1 | #ifndef SSZipCommon 2 | #define SSZipCommon 3 | 4 | /* tm_unz contain date/time info */ 5 | typedef struct tm_unz_s 6 | { 7 | unsigned int tm_sec; /* seconds after the minute - [0,59] */ 8 | unsigned int tm_min; /* minutes after the hour - [0,59] */ 9 | unsigned int tm_hour; /* hours since midnight - [0,23] */ 10 | unsigned int tm_mday; /* day of the month - [1,31] */ 11 | unsigned int tm_mon; /* months since January - [0,11] */ 12 | unsigned int tm_year; /* years - [1980..2044] */ 13 | } tm_unz; 14 | 15 | typedef struct unz_file_info_s 16 | { 17 | unsigned long version; /* version made by 2 bytes */ 18 | unsigned long version_needed; /* version needed to extract 2 bytes */ 19 | unsigned long flag; /* general purpose bit flag 2 bytes */ 20 | unsigned long compression_method; /* compression method 2 bytes */ 21 | unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */ 22 | unsigned long crc; /* crc-32 4 bytes */ 23 | unsigned long compressed_size; /* compressed size 4 bytes */ 24 | unsigned long uncompressed_size; /* uncompressed size 4 bytes */ 25 | unsigned long size_filename; /* filename length 2 bytes */ 26 | unsigned long size_file_extra; /* extra field length 2 bytes */ 27 | unsigned long size_file_comment; /* file comment length 2 bytes */ 28 | 29 | unsigned long disk_num_start; /* disk number start 2 bytes */ 30 | unsigned long internal_fa; /* internal file attributes 2 bytes */ 31 | unsigned long external_fa; /* external file attributes 4 bytes */ 32 | 33 | tm_unz tmu_date; 34 | } unz_file_info; 35 | 36 | /* unz_file_info contain information about a file in the zipfile */ 37 | typedef struct unz_file_info64_s 38 | { 39 | unsigned long version; /* version made by 2 bytes */ 40 | unsigned long version_needed; /* version needed to extract 2 bytes */ 41 | unsigned long flag; /* general purpose bit flag 2 bytes */ 42 | unsigned long compression_method; /* compression method 2 bytes */ 43 | unsigned long dosDate; /* last mod file date in Dos fmt 4 bytes */ 44 | unsigned long crc; /* crc-32 4 bytes */ 45 | unsigned long long compressed_size; /* compressed size 8 bytes */ 46 | unsigned long long uncompressed_size; /* uncompressed size 8 bytes */ 47 | unsigned long size_filename; /* filename length 2 bytes */ 48 | unsigned long size_file_extra; /* extra field length 2 bytes */ 49 | unsigned long size_file_comment; /* file comment length 2 bytes */ 50 | 51 | unsigned long disk_num_start; /* disk number start 2 bytes */ 52 | unsigned long internal_fa; /* internal file attributes 2 bytes */ 53 | unsigned long external_fa; /* external file attributes 4 bytes */ 54 | 55 | tm_unz tmu_date; 56 | unsigned long long disk_offset; 57 | unsigned long size_file_extra_internal; 58 | } unz_file_info64; 59 | 60 | typedef struct unz_global_info_s 61 | { 62 | unsigned long number_entry; /* total number of entries in 63 | the central dir on this disk */ 64 | 65 | unsigned long number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP*/ 66 | 67 | 68 | unsigned long size_comment; /* size of the global comment of the zipfile */ 69 | } unz_global_info; 70 | 71 | typedef struct unz_global_info64 72 | { 73 | unsigned long long number_entry; /* total number of entries in 74 | the central dir on this disk */ 75 | 76 | unsigned long number_disk_with_CD; /* number the the disk with central dir, used for spanning ZIP*/ 77 | 78 | unsigned long size_comment; /* size of the global comment of the zipfile */ 79 | } unz_global_info64; 80 | 81 | #endif -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/SSZipArchive.h: -------------------------------------------------------------------------------- 1 | // 2 | // SSZipArchive.h 3 | // SSZipArchive 4 | // 5 | // Created by Sam Soffes on 7/21/10. 6 | // Copyright (c) Sam Soffes 2010-2015. All rights reserved. 7 | // 8 | 9 | #ifndef _SSZIPARCHIVE_H 10 | #define _SSZIPARCHIVE_H 11 | 12 | #import 13 | #include "Common.h" 14 | 15 | @protocol SSZipArchiveDelegate; 16 | 17 | @interface SSZipArchive : NSObject 18 | 19 | // Unzip 20 | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination; 21 | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination delegate:(id)delegate; 22 | 23 | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError * *)error; 24 | + (BOOL)unzipFileAtPath:(NSString *)path toDestination:(NSString *)destination overwrite:(BOOL)overwrite password:(NSString *)password error:(NSError * *)error delegate:(id)delegate; 25 | 26 | + (BOOL)unzipFileAtPath:(NSString *)path 27 | toDestination:(NSString *)destination 28 | progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler 29 | completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError *error))completionHandler; 30 | 31 | + (BOOL)unzipFileAtPath:(NSString *)path 32 | toDestination:(NSString *)destination 33 | overwrite:(BOOL)overwrite 34 | password:(NSString *)password 35 | progressHandler:(void (^)(NSString *entry, unz_file_info zipInfo, long entryNumber, long total))progressHandler 36 | completionHandler:(void (^)(NSString *path, BOOL succeeded, NSError *error))completionHandler; 37 | 38 | // Zip 39 | 40 | // without password 41 | + (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths; 42 | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath; 43 | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirector; 44 | 45 | // with password, password could be nil 46 | + (BOOL)createZipFileAtPath:(NSString *)path withFilesAtPaths:(NSArray *)paths withPassword:(NSString *)password; 47 | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath withPassword:(NSString *)password; 48 | + (BOOL)createZipFileAtPath:(NSString *)path withContentsOfDirectory:(NSString *)directoryPath keepParentDirectory:(BOOL)keepParentDirectory withPassword:(NSString *)password; 49 | 50 | - (instancetype)initWithPath:(NSString *)path; 51 | @property (NS_NONATOMIC_IOSONLY, readonly, getter = isOpen) BOOL open; 52 | - (BOOL)writeFile:(NSString *)path withPassword:(NSString *)password; 53 | - (BOOL)writeFolderAtPath:(NSString *)path withFolderName:(NSString *)folderName withPassword:(NSString *)password; 54 | - (BOOL)writeFileAtPath:(NSString *)path withFileName:(NSString *)fileName withPassword:(NSString *)password; 55 | - (BOOL)writeData:(NSData *)data filename:(NSString *)filename withPassword:(NSString *)password; 56 | @property (NS_NONATOMIC_IOSONLY, readonly, getter = isClosed) BOOL close; 57 | 58 | @end 59 | 60 | @protocol SSZipArchiveDelegate 61 | 62 | @optional 63 | 64 | - (void)zipArchiveWillUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo; 65 | - (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath; 66 | 67 | - (BOOL)zipArchiveShouldUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; 68 | - (void)zipArchiveWillUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; 69 | - (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath fileInfo:(unz_file_info)fileInfo; 70 | - (void)zipArchiveDidUnzipFileAtIndex:(NSInteger)fileIndex totalFiles:(NSInteger)totalFiles archivePath:(NSString *)archivePath unzippedFilePath:(NSString *)unzippedFilePath; 71 | 72 | - (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total; 73 | - (void)zipArchiveDidUnzipArchiveFile:(NSString *)zipFile entryPath:(NSString *)entryPath destPath:(NSString *)destPath; 74 | 75 | @end 76 | 77 | #endif /* _SSZIPARCHIVE_H */ 78 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/ZipArchive.h: -------------------------------------------------------------------------------- 1 | // 2 | // ZipArchive.h 3 | // ZipArchive 4 | // 5 | // Created by Serhii Mumriak on 12/1/15. 6 | // Copyright © 2015 smumryak. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ZipArchive. 12 | FOUNDATION_EXPORT double ZipArchiveVersionNumber; 13 | 14 | //! Project version string for ZipArchive. 15 | FOUNDATION_EXPORT const unsigned char ZipArchiveVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | #import "SSZipArchive.h" 20 | 21 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/entropy.c: -------------------------------------------------------------------------------- 1 | #ifdef _WIN32 2 | #include 3 | #else 4 | #include 5 | #include 6 | #include 7 | #endif 8 | 9 | #if defined(__cplusplus) 10 | extern "C" 11 | { 12 | #endif 13 | 14 | #ifdef _WIN32 15 | int entropy_fun(unsigned char buf[], unsigned int len) 16 | { 17 | HCRYPTPROV provider; 18 | unsigned __int64 pentium_tsc[1]; 19 | unsigned int i; 20 | int result = 0; 21 | 22 | 23 | if (CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) 24 | { 25 | result = CryptGenRandom(provider, len, buf); 26 | CryptReleaseContext(provider, 0); 27 | if (result) 28 | return len; 29 | } 30 | 31 | QueryPerformanceCounter((LARGE_INTEGER *)pentium_tsc); 32 | 33 | for(i = 0; i < 8 && i < len; ++i) 34 | buf[i] = ((unsigned char*)pentium_tsc)[i]; 35 | 36 | return i; 37 | } 38 | #else 39 | int entropy_fun(unsigned char buf[], unsigned int len) 40 | { 41 | int frand = open("/dev/random", O_RDONLY); 42 | int rlen = 0; 43 | if (frand != -1) 44 | { 45 | rlen = (int)read(frand, buf, len); 46 | close(frand); 47 | } 48 | return rlen; 49 | } 50 | #endif 51 | 52 | #if defined(__cplusplus) 53 | } 54 | #endif 55 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/entropy.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef _ENTROPY_FUN_H 3 | #define _ENTROPY_FUN_H 4 | 5 | #if defined(__cplusplus) 6 | extern "C" 7 | { 8 | #endif 9 | 10 | int entropy_fun(unsigned char buf[], unsigned int len); 11 | 12 | #if defined(__cplusplus) 13 | } 14 | #endif 15 | 16 | #endif 17 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/fileenc.h: -------------------------------------------------------------------------------- 1 | /* 2 | --------------------------------------------------------------------------- 3 | Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. 4 | All rights reserved. 5 | 6 | LICENSE TERMS 7 | 8 | The free distribution and use of this software in both source and binary 9 | form is allowed (with or without changes) provided that: 10 | 11 | 1. distributions of this source code include the above copyright 12 | notice, this list of conditions and the following disclaimer; 13 | 14 | 2. distributions in binary form include the above copyright 15 | notice, this list of conditions and the following disclaimer 16 | in the documentation and/or other associated materials; 17 | 18 | 3. the copyright holder's name is not used to endorse products 19 | built using this software without specific written permission. 20 | 21 | ALTERNATIVELY, provided that this notice is retained in full, this product 22 | may be distributed under the terms of the GNU General Public License (GPL), 23 | in which case the provisions of the GPL apply INSTEAD OF those given above. 24 | 25 | DISCLAIMER 26 | 27 | This software is provided 'as is' with no explicit or implied warranties 28 | in respect of its properties, including, but not limited to, correctness 29 | and/or fitness for purpose. 30 | --------------------------------------------------------------------------- 31 | Issue Date: 24/01/2003 32 | 33 | This file contains the header file for fileenc.c, which implements password 34 | based file encryption and authentication using AES in CTR mode, HMAC-SHA1 35 | authentication and RFC2898 password based key derivation. 36 | */ 37 | 38 | #ifndef _FENC_H 39 | #define _FENC_H 40 | 41 | #include "aes.h" 42 | #include "hmac.h" 43 | #include "pwd2key.h" 44 | 45 | #define PASSWORD_VERIFIER 46 | 47 | #define MAX_KEY_LENGTH 32 48 | #define MAX_PWD_LENGTH 128 49 | #define MAX_SALT_LENGTH 16 50 | #define KEYING_ITERATIONS 1000 51 | 52 | #ifdef PASSWORD_VERIFIER 53 | #define PWD_VER_LENGTH 2 54 | #else 55 | #define PWD_VER_LENGTH 0 56 | #endif 57 | 58 | #define GOOD_RETURN 0 59 | #define PASSWORD_TOO_LONG -100 60 | #define BAD_MODE -101 61 | 62 | /* 63 | Field lengths (in bytes) versus File Encryption Mode (0 < mode < 4) 64 | 65 | Mode Key Salt MAC Overhead 66 | 1 16 8 10 18 67 | 2 24 12 10 22 68 | 3 32 16 10 26 69 | 70 | The following macros assume that the mode value is correct. 71 | */ 72 | 73 | #define KEY_LENGTH(mode) (8 * (mode & 3) + 8) 74 | #define SALT_LENGTH(mode) (4 * (mode & 3) + 4) 75 | #define MAC_LENGTH(mode) (10) 76 | 77 | /* the context for file encryption */ 78 | 79 | #if defined(__cplusplus) 80 | extern "C" 81 | { 82 | #endif 83 | 84 | typedef struct 85 | { unsigned char nonce[AES_BLOCK_SIZE]; /* the CTR nonce */ 86 | unsigned char encr_bfr[AES_BLOCK_SIZE]; /* encrypt buffer */ 87 | aes_encrypt_ctx encr_ctx[1]; /* encryption context */ 88 | hmac_ctx auth_ctx[1]; /* authentication context */ 89 | unsigned int encr_pos; /* block position (enc) */ 90 | unsigned int pwd_len; /* password length */ 91 | unsigned int mode; /* File encryption mode */ 92 | } fcrypt_ctx; 93 | 94 | /* initialise file encryption or decryption */ 95 | 96 | int fcrypt_init( 97 | int mode, /* the mode to be used (input) */ 98 | const unsigned char pwd[], /* the user specified password (input) */ 99 | unsigned int pwd_len, /* the length of the password (input) */ 100 | const unsigned char salt[], /* the salt (input) */ 101 | #ifdef PASSWORD_VERIFIER 102 | unsigned char pwd_ver[PWD_VER_LENGTH], /* 2 byte password verifier (output) */ 103 | #endif 104 | fcrypt_ctx cx[1]); /* the file encryption context (output) */ 105 | 106 | /* perform 'in place' encryption or decryption and authentication */ 107 | 108 | void fcrypt_encrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]); 109 | void fcrypt_decrypt(unsigned char data[], unsigned int data_len, fcrypt_ctx cx[1]); 110 | 111 | /* close encryption/decryption and return the MAC value */ 112 | /* the return value is the length of the MAC */ 113 | 114 | int fcrypt_end(unsigned char mac[], /* the MAC value (output) */ 115 | fcrypt_ctx cx[1]); /* the context (input) */ 116 | 117 | #if defined(__cplusplus) 118 | } 119 | #endif 120 | 121 | #endif 122 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/hmac.h: -------------------------------------------------------------------------------- 1 | /* 2 | --------------------------------------------------------------------------- 3 | Copyright (c) 2002, Dr Brian Gladman, Worcester, UK. All rights reserved. 4 | 5 | LICENSE TERMS 6 | 7 | The free distribution and use of this software in both source and binary 8 | form is allowed (with or without changes) provided that: 9 | 10 | 1. distributions of this source code include the above copyright 11 | notice, this list of conditions and the following disclaimer; 12 | 13 | 2. distributions in binary form include the above copyright 14 | notice, this list of conditions and the following disclaimer 15 | in the documentation and/or other associated materials; 16 | 17 | 3. the copyright holder's name is not used to endorse products 18 | built using this software without specific written permission. 19 | 20 | ALTERNATIVELY, provided that this notice is retained in full, this product 21 | may be distributed under the terms of the GNU General Public License (GPL), 22 | in which case the provisions of the GPL apply INSTEAD OF those given above. 23 | 24 | DISCLAIMER 25 | 26 | This software is provided 'as is' with no explicit or implied warranties 27 | in respect of its properties, including, but not limited to, correctness 28 | and/or fitness for purpose. 29 | --------------------------------------------------------------------------- 30 | Issue Date: 26/08/2003 31 | 32 | This is an implementation of HMAC, the FIPS standard keyed hash function 33 | */ 34 | 35 | #ifndef _HMAC_H 36 | #define _HMAC_H 37 | 38 | #include 39 | 40 | #if defined(__cplusplus) 41 | extern "C" 42 | { 43 | #endif 44 | 45 | #define USE_SHA1 46 | 47 | #if !defined(USE_SHA1) && !defined(USE_SHA256) 48 | #error define USE_SHA1 or USE_SHA256 to set the HMAC hash algorithm 49 | #endif 50 | 51 | #ifdef USE_SHA1 52 | 53 | #include "sha1.h" 54 | 55 | #define HASH_INPUT_SIZE SHA1_BLOCK_SIZE 56 | #define HASH_OUTPUT_SIZE SHA1_DIGEST_SIZE 57 | #define sha_ctx sha1_ctx 58 | #define sha_begin sha1_begin 59 | #define sha_hash sha1_hash 60 | #define sha_end sha1_end 61 | 62 | #endif 63 | 64 | #ifdef USE_SHA256 65 | 66 | #include "sha2.h" 67 | 68 | #define HASH_INPUT_SIZE SHA256_BLOCK_SIZE 69 | #define HASH_OUTPUT_SIZE SHA256_DIGEST_SIZE 70 | #define sha_ctx sha256_ctx 71 | #define sha_begin sha256_begin 72 | #define sha_hash sha256_hash 73 | #define sha_end sha256_end 74 | 75 | #endif 76 | 77 | #define HMAC_OK 0 78 | #define HMAC_BAD_MODE -1 79 | #define HMAC_IN_DATA 0xffffffff 80 | 81 | typedef struct 82 | { unsigned char key[HASH_INPUT_SIZE]; 83 | sha_ctx ctx[1]; 84 | unsigned long klen; 85 | } hmac_ctx; 86 | 87 | void hmac_sha_begin(hmac_ctx cx[1]); 88 | 89 | int hmac_sha_key(const unsigned char key[], unsigned long key_len, hmac_ctx cx[1]); 90 | 91 | void hmac_sha_data(const unsigned char data[], unsigned long data_len, hmac_ctx cx[1]); 92 | 93 | void hmac_sha_end(unsigned char mac[], unsigned long mac_len, hmac_ctx cx[1]); 94 | 95 | void hmac_sha(const unsigned char key[], unsigned long key_len, 96 | const unsigned char data[], unsigned long data_len, 97 | unsigned char mac[], unsigned long mac_len); 98 | 99 | #if defined(__cplusplus) 100 | } 101 | #endif 102 | 103 | #endif 104 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/prng.h: -------------------------------------------------------------------------------- 1 | /* 2 | --------------------------------------------------------------------------- 3 | Copyright (c) 2002, Dr Brian Gladman < >, Worcester, UK. 4 | All rights reserved. 5 | 6 | LICENSE TERMS 7 | 8 | The free distribution and use of this software in both source and binary 9 | form is allowed (with or without changes) provided that: 10 | 11 | 1. distributions of this source code include the above copyright 12 | notice, this list of conditions and the following disclaimer; 13 | 14 | 2. distributions in binary form include the above copyright 15 | notice, this list of conditions and the following disclaimer 16 | in the documentation and/or other associated materials; 17 | 18 | 3. the copyright holder's name is not used to endorse products 19 | built using this software without specific written permission. 20 | 21 | ALTERNATIVELY, provided that this notice is retained in full, this product 22 | may be distributed under the terms of the GNU General Public License (GPL), 23 | in which case the provisions of the GPL apply INSTEAD OF those given above. 24 | 25 | DISCLAIMER 26 | 27 | This software is provided 'as is' with no explicit or implied warranties 28 | in respect of its properties, including, but not limited to, correctness 29 | and/or fitness for purpose. 30 | --------------------------------------------------------------------------- 31 | Issue Date: 24/01/2003 32 | 33 | This is the header file for an implementation of a random data pool based on 34 | the use of an external entropy function (inspired by Peter Gutmann's work). 35 | */ 36 | 37 | #ifndef _PRNG_H 38 | #define _PRNG_H 39 | 40 | #include "sha1.h" 41 | 42 | #define PRNG_POOL_LEN 256 /* minimum random pool size */ 43 | #define PRNG_MIN_MIX 20 /* min initial pool mixing iterations */ 44 | 45 | /* ensure that pool length is a multiple of the SHA1 digest size */ 46 | 47 | #define PRNG_POOL_SIZE (SHA1_DIGEST_SIZE * (1 + (PRNG_POOL_LEN - 1) / SHA1_DIGEST_SIZE)) 48 | 49 | #if defined(__cplusplus) 50 | extern "C" 51 | { 52 | #endif 53 | 54 | /* A function for providing entropy is a parameter in the prng_init() */ 55 | /* call. This function has the following form and returns a maximum */ 56 | /* of 'len' bytes of pseudo random data in the buffer 'buf'. It can */ 57 | /* return less than 'len' bytes but will be repeatedly called for more */ 58 | /* data in this case. */ 59 | 60 | typedef int (*prng_entropy_fn)(unsigned char buf[], unsigned int len); 61 | 62 | typedef struct 63 | { unsigned char rbuf[PRNG_POOL_SIZE]; /* the random pool */ 64 | unsigned char obuf[PRNG_POOL_SIZE]; /* pool output buffer */ 65 | unsigned int pos; /* output buffer position */ 66 | prng_entropy_fn entropy; /* entropy function pointer */ 67 | } prng_ctx; 68 | 69 | /* initialise the random stream generator */ 70 | void prng_init(prng_entropy_fn fun, prng_ctx ctx[1]); 71 | 72 | /* obtain random bytes from the generator */ 73 | void prng_rand(unsigned char data[], unsigned int data_len, prng_ctx ctx[1]); 74 | 75 | /* close the random stream generator */ 76 | void prng_end(prng_ctx ctx[1]); 77 | 78 | #if defined(__cplusplus) 79 | } 80 | #endif 81 | 82 | #endif 83 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/pwd2key.h: -------------------------------------------------------------------------------- 1 | /* 2 | --------------------------------------------------------------------------- 3 | Copyright (c) 2002, Dr Brian Gladman, Worcester, UK. All rights reserved. 4 | 5 | LICENSE TERMS 6 | 7 | The free distribution and use of this software in both source and binary 8 | form is allowed (with or without changes) provided that: 9 | 10 | 1. distributions of this source code include the above copyright 11 | notice, this list of conditions and the following disclaimer; 12 | 13 | 2. distributions in binary form include the above copyright 14 | notice, this list of conditions and the following disclaimer 15 | in the documentation and/or other associated materials; 16 | 17 | 3. the copyright holder's name is not used to endorse products 18 | built using this software without specific written permission. 19 | 20 | ALTERNATIVELY, provided that this notice is retained in full, this product 21 | may be distributed under the terms of the GNU General Public License (GPL), 22 | in which case the provisions of the GPL apply INSTEAD OF those given above. 23 | 24 | DISCLAIMER 25 | 26 | This software is provided 'as is' with no explicit or implied warranties 27 | in respect of its properties, including, but not limited to, correctness 28 | and/or fitness for purpose. 29 | --------------------------------------------------------------------------- 30 | Issue Date: 26/08/2003 31 | 32 | This is an implementation of RFC2898, which specifies key derivation from 33 | a password and a salt value. 34 | */ 35 | 36 | #ifndef PWD2KEY_H 37 | #define PWD2KEY_H 38 | 39 | #if defined(__cplusplus) 40 | extern "C" 41 | { 42 | #endif 43 | 44 | void derive_key( 45 | const unsigned char pwd[], /* the PASSWORD, and */ 46 | unsigned int pwd_len, /* its length */ 47 | const unsigned char salt[], /* the SALT and its */ 48 | unsigned int salt_len, /* length */ 49 | unsigned int iter, /* the number of iterations */ 50 | unsigned char key[], /* space for the output key */ 51 | unsigned int key_len); /* and its required length */ 52 | 53 | #if defined(__cplusplus) 54 | } 55 | #endif 56 | 57 | #endif 58 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/aes/sha1.h: -------------------------------------------------------------------------------- 1 | /* 2 | --------------------------------------------------------------------------- 3 | Copyright (c) 2002, Dr Brian Gladman, Worcester, UK. All rights reserved. 4 | 5 | LICENSE TERMS 6 | 7 | The free distribution and use of this software in both source and binary 8 | form is allowed (with or without changes) provided that: 9 | 10 | 1. distributions of this source code include the above copyright 11 | notice, this list of conditions and the following disclaimer; 12 | 13 | 2. distributions in binary form include the above copyright 14 | notice, this list of conditions and the following disclaimer 15 | in the documentation and/or other associated materials; 16 | 17 | 3. the copyright holder's name is not used to endorse products 18 | built using this software without specific written permission. 19 | 20 | ALTERNATIVELY, provided that this notice is retained in full, this product 21 | may be distributed under the terms of the GNU General Public License (GPL), 22 | in which case the provisions of the GPL apply INSTEAD OF those given above. 23 | 24 | DISCLAIMER 25 | 26 | This software is provided 'as is' with no explicit or implied warranties 27 | in respect of its properties, including, but not limited to, correctness 28 | and/or fitness for purpose. 29 | --------------------------------------------------------------------------- 30 | Issue Date: 01/08/2005 31 | */ 32 | 33 | #ifndef _SHA1_H 34 | #define _SHA1_H 35 | 36 | #include 37 | #include "brg_types.h" 38 | 39 | #define SHA1_BLOCK_SIZE 64 40 | #define SHA1_DIGEST_SIZE 20 41 | 42 | #if defined(__cplusplus) 43 | extern "C" 44 | { 45 | #endif 46 | 47 | /* type to hold the SHA256 context */ 48 | 49 | typedef struct 50 | { uint_32t count[2]; 51 | uint_32t hash[5]; 52 | uint_32t wbuf[16]; 53 | } sha1_ctx; 54 | 55 | /* Note that these prototypes are the same for both bit and */ 56 | /* byte oriented implementations. However the length fields */ 57 | /* are in bytes or bits as appropriate for the version used */ 58 | /* and bit sequences are input as arrays of bytes in which */ 59 | /* bit sequences run from the most to the least significant */ 60 | /* end of each byte */ 61 | 62 | VOID_RETURN sha1_compile(sha1_ctx ctx[1]); 63 | 64 | VOID_RETURN sha1_begin(sha1_ctx ctx[1]); 65 | VOID_RETURN sha1_hash(const unsigned char data[], unsigned long len, sha1_ctx ctx[1]); 66 | VOID_RETURN sha1_end(unsigned char hval[], sha1_ctx ctx[1]); 67 | VOID_RETURN sha1(unsigned char hval[], const unsigned char data[], unsigned long len); 68 | 69 | #if defined(__cplusplus) 70 | } 71 | #endif 72 | 73 | #endif 74 | -------------------------------------------------------------------------------- /Pods/SSZipArchive/SSZipArchive/minizip/mztools.h: -------------------------------------------------------------------------------- 1 | /* 2 | Additional tools for Minizip 3 | Code: Xavier Roche '2004 4 | License: Same as ZLIB (www.gzip.org) 5 | */ 6 | 7 | #ifndef _zip_tools_H 8 | #define _zip_tools_H 9 | 10 | #ifdef __cplusplus 11 | extern "C" { 12 | #endif 13 | 14 | #ifndef _ZLIB_H 15 | #include "zlib.h" 16 | #endif 17 | 18 | #include "unzip.h" 19 | 20 | /* Repair a ZIP file (missing central directory) 21 | file: file to recover 22 | fileOut: output file after recovery 23 | fileOutTmp: temporary file name used for recovery 24 | */ 25 | extern int ZEXPORT unzRepair(const char* file, 26 | const char* fileOut, 27 | const char* fileOutTmp, 28 | uLong* nRecovered, 29 | uLong* bytesRecovered); 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/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-Meme Maker/Pods-Meme Maker-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## SSZipArchive 5 | 6 | Copyright (c) 2010-2015, Sam Soffes, http://soff.es 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining 9 | a copy of this software and associated documentation files (the 10 | "Software"), to deal in the Software without restriction, including 11 | without limitation the rights to use, copy, modify, merge, publish, 12 | distribute, sublicense, and/or sell copies of the Software, and to 13 | permit persons to whom the Software is furnished to do so, subject to 14 | the following conditions: 15 | 16 | The above copyright notice and this permission notice shall be 17 | included in all copies or substantial portions of the Software. 18 | 19 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 23 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 24 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 25 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 | 27 | Generated by CocoaPods - https://cocoapods.org 28 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker-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 | Copyright (c) 2010-2015, Sam Soffes, http://soff.es 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining 20 | a copy of this software and associated documentation files (the 21 | "Software"), to deal in the Software without restriction, including 22 | without limitation the rights to use, copy, modify, merge, publish, 23 | distribute, sublicense, and/or sell copies of the Software, and to 24 | permit persons to whom the Software is furnished to do so, subject to 25 | the following conditions: 26 | 27 | The above copyright notice and this permission notice shall be 28 | included in all copies or substantial portions of the Software. 29 | 30 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 31 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 32 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 33 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 34 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 35 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 36 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 37 | 38 | Title 39 | SSZipArchive 40 | Type 41 | PSGroupSpecifier 42 | 43 | 44 | FooterText 45 | Generated by CocoaPods - https://cocoapods.org 46 | Title 47 | 48 | Type 49 | PSGroupSpecifier 50 | 51 | 52 | StringsTable 53 | Acknowledgements 54 | Title 55 | Acknowledgements 56 | 57 | 58 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Meme_Maker : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Meme_Maker 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/SSZipArchive/SSZipArchive.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "$BUILT_PRODUCTS_DIR/SSZipArchive/SSZipArchive.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Meme_MakerVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Meme_MakerVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SSZipArchive" 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/SSZipArchive/SSZipArchive.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SSZipArchive" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Meme_Maker { 2 | umbrella header "Pods-Meme Maker-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme Maker/Pods-Meme Maker.release.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/SSZipArchive" 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/SSZipArchive/SSZipArchive.framework/Headers" 6 | OTHER_LDFLAGS = $(inherited) -framework "SSZipArchive" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/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-Meme MakerTests/Pods-Meme MakerTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Meme_MakerTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Meme_MakerTests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Meme_MakerTestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Meme_MakerTestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Meme_MakerTests { 2 | umbrella header "Pods-Meme MakerTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerTests/Pods-Meme MakerTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/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-Meme MakerUITests/Pods-Meme MakerUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Meme_MakerUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Meme_MakerUITests 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_Meme_MakerUITestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_Meme_MakerUITestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Meme_MakerUITests { 2 | umbrella header "Pods-Meme MakerUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Meme MakerUITests/Pods-Meme MakerUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/SSZipArchive-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SSZipArchive : NSObject 3 | @end 4 | @implementation PodsDummy_SSZipArchive 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/SSZipArchive-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/SSZipArchive-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "Common.h" 4 | #import "SSZipArchive.h" 5 | #import "ZipArchive.h" 6 | 7 | FOUNDATION_EXPORT double SSZipArchiveVersionNumber; 8 | FOUNDATION_EXPORT const unsigned char SSZipArchiveVersionString[]; 9 | 10 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/SSZipArchive.modulemap: -------------------------------------------------------------------------------- 1 | framework module SSZipArchive { 2 | umbrella header "SSZipArchive-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SSZipArchive/SSZipArchive.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SSZipArchive 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 5 | OTHER_LDFLAGS = -l"z" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Meme Maker](https://itunes.apple.com/app/id1132989104) 2 | 3 | ##### Add text to popular images, share with the world. 4 | 5 | -------------------- 6 | ##Screens 7 | 8 | [![](http://a3.mzstatic.com/us/r30/Purple20/v4/a4/1c/07/a41c0742-7841-ebd6-2a1a-22497222514c/screen800x500.jpeg)](https://itunes.apple.com/app/id1132989104) 9 | [![](http://a4.mzstatic.com/us/r30/Purple20/v4/d6/63/25/d6632584-ccf2-031d-9619-27b0fd1c0157/screen800x500.jpeg)](https://itunes.apple.com/app/id1132989104) 10 | [![](http://a5.mzstatic.com/us/r30/Purple30/v4/85/9c/1e/859c1eb0-32cb-bb5a-7b6d-7a2a98c972e1/screen800x500.jpeg)](https://itunes.apple.com/app/id1132989104) 11 | [![](http://a2.mzstatic.com/us/r30/Purple60/v4/e3/a1/89/e3a18979-63b9-8576-73ac-a0d34b921ca8/screen800x500.jpeg)](https://itunes.apple.com/app/id1132989104) 12 | 13 | -------------------- 14 | ##Features 15 | 16 | - Select or search a meme from a huge collection. 17 | - Smart searching options ('Star Wars' gives you all of Star Wars and related memes) 18 | - Editing options like Alignment, Text Size, Text Color, Shadow, Outline Width, and Outline Color. 19 | - Pinch to change text size; Option drag to move text. 20 | - Easy adding default text (the title like 'Am I The Only One Around Here', or 'One does not simply', etc; different for top and bottom texts for some) 21 | - Pick up last edited image instantly. 22 | - Easy drag and drop save and open support. 23 | - One click sharing options. 24 | - Inspirational quotes (on the help page). 25 | - Really neat UI design. (Yeah it’s neat, okay) 26 | - Completely free with no ads (and will be that way) 27 | - No disturbing notifications that irritate the users. 28 | 29 | -------------------- 30 | 31 | [![Get the app from App Store](http://www.perfectdiettracker.com/wordpress/wp-content/uploads/2011/01/macappstore.png)](https://itunes.apple.com/app/id1132989104) 32 | 33 | -------------------- 34 | 35 | ## The app uses: 36 | 37 | - [SSZipArchive](https://github.com/soffes/ssziparchive) as zip archive utility. 38 | - [DragDropImageView](https://developer.apple.com/library/mac/samplecode/CocoaDragAndDrop/Introduction/Intro.html#//apple_ref/doc/uid/DTS10000384-Intro-DontLinkElementID_2) as the drag drop supporting image view. 39 | - [GRVibrantTitlebarWindow](https://github.com/insidegui/GRVibrantTitlebarWindow) as the vibrant title bar window to go along with app's UI. 40 | 41 | -------------------- 42 | 43 | ## iOS Version 44 | 45 | **iOS version of the app is available on the [iTunes Store](https://itunes.apple.com/app/id962121383) and on [GitHub](https://github.com/MemeMaker/Meme-Maker-iOS).** 46 | 47 | [![Get the app from App Store](http://www.catan.com/images/stories/Elektronische_Spiele/iPhone_Catan/AppStore_klein_24.png)](https://itunes.apple.com/app/id962121383) 48 | --------------------------------------------------------------------------------