├── .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 | [](https://itunes.apple.com/app/id1132989104)
9 | [](https://itunes.apple.com/app/id1132989104)
10 | [](https://itunes.apple.com/app/id1132989104)
11 | [](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 | [](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 | [](https://itunes.apple.com/app/id962121383)
48 |
--------------------------------------------------------------------------------