Compare commits
179 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b92da20460 | ||
|
|
c54a35059c | ||
|
|
fedb19b8a7 | ||
|
|
51eca2a931 | ||
|
|
b22a605285 | ||
|
|
118a777ff2 | ||
|
|
690bf6be67 | ||
|
|
1ea2201dd3 | ||
|
|
fb6e2444be | ||
|
|
ddc5a0d7ea | ||
|
|
7f05ad9ef6 | ||
|
|
94817f1715 | ||
|
|
abeb3eb4b1 | ||
|
|
3d9c47bf60 | ||
|
|
fcd99c015a | ||
|
|
66fb9abb8d | ||
|
|
d5ba63a0a4 | ||
|
|
44b930169c | ||
|
|
f7ed2b2063 | ||
|
|
de6e53da44 | ||
|
|
ead9ec4656 | ||
|
|
ffd05b16a5 | ||
|
|
a8c1dfdae5 | ||
|
|
b3bd6ecc16 | ||
|
|
773c9c9ddd | ||
|
|
90ce675259 | ||
|
|
f53bf4637d | ||
|
|
804141486d | ||
|
|
86bb26031d | ||
|
|
74ae451630 | ||
|
|
c70e28dd42 | ||
|
|
04208a6f75 | ||
|
|
5c963bda6a | ||
|
|
04cb290dc1 | ||
|
|
a4f97f92c3 | ||
|
|
dfb230dcd2 | ||
|
|
87d68ec2a7 | ||
|
|
3c95c3df2d | ||
|
|
eaebe860da | ||
|
|
2bdd30f9ed | ||
|
|
adc0a0d580 | ||
|
|
dddaa62c25 | ||
|
|
ea3ab5ed28 | ||
|
|
068c4b92c1 | ||
|
|
ee3d999eb3 | ||
|
|
cc623a0157 | ||
|
|
0db2bb6fb0 | ||
|
|
6163929275 | ||
|
|
1949d8f07e | ||
|
|
7299a7067a | ||
|
|
f9736d6273 | ||
|
|
14c89be4b9 | ||
|
|
2389058301 | ||
|
|
8f0888670a | ||
|
|
10695e5df6 | ||
|
|
bf8c97e92b | ||
|
|
1807313d35 | ||
|
|
ef24da44d5 | ||
|
|
b9b50559aa | ||
|
|
8384be5c1e | ||
|
|
61f124d82c | ||
|
|
24b4f4ab8f | ||
|
|
a717880f55 | ||
|
|
ffb40f4d14 | ||
|
|
bdcacffcb4 | ||
|
|
d57ed6802a | ||
|
|
d8bc619f3c | ||
|
|
b5270a4892 | ||
|
|
44b876e0a5 | ||
|
|
9104458f49 | ||
|
|
0a73212e72 | ||
|
|
556b57cabe | ||
|
|
96f70c8bdf | ||
|
|
586ef9e215 | ||
|
|
2a1d87665b | ||
|
|
dd81a54a77 | ||
|
|
3f78915843 | ||
|
|
e1d6e23ef7 | ||
|
|
43d2b0d4ef | ||
|
|
0ea672f4d5 | ||
|
|
cc3706ca07 | ||
|
|
e7a93e08e7 | ||
|
|
674f044a43 | ||
|
|
9f00619483 | ||
|
|
fd361253d8 | ||
|
|
051e0d2f10 | ||
|
|
202c1701c5 | ||
|
|
4e03a1d725 | ||
|
|
93ae5bf93a | ||
|
|
813de6e889 | ||
|
|
e1de2361bf | ||
|
|
7feeafba9d | ||
|
|
a0fe19a2fd | ||
|
|
6b8e8915ea | ||
|
|
8d5ae9e3d5 | ||
|
|
7e8b62a07e | ||
|
|
be83189c67 | ||
|
|
73b50357d9 | ||
|
|
8e747575a5 | ||
|
|
6ef0ad4811 | ||
|
|
a806177a1b | ||
|
|
304380a9ac | ||
|
|
2f7b70cb0d | ||
|
|
5a4d1da0b5 | ||
|
|
7b5477469a | ||
|
|
7a76f714c4 | ||
|
|
ef3f7e6f63 | ||
|
|
ce4d4a42ff | ||
|
|
c137d761e4 | ||
|
|
082697fa93 | ||
|
|
e23f3b7fee | ||
|
|
084a5a8a60 | ||
|
|
1e13a7bf32 | ||
|
|
3504757c82 | ||
|
|
829e2bf686 | ||
|
|
2502c3f63d | ||
|
|
2082b3fcad | ||
|
|
c1c9158b98 | ||
|
|
413996175e | ||
|
|
32e508d30b | ||
|
|
d14a80f748 | ||
|
|
ce4432f0e2 | ||
|
|
ad5a344d1c | ||
|
|
b932118b1c | ||
|
|
b5c132ba67 | ||
|
|
9f88400adc | ||
|
|
f4d18b4a80 | ||
|
|
2c884c40f1 | ||
|
|
5948dcfbc2 | ||
|
|
351e43645d | ||
|
|
420cf1b6b7 | ||
|
|
4e92562547 | ||
|
|
4e077db6d2 | ||
|
|
7ff1576d37 | ||
|
|
f9a1750dba | ||
|
|
cee80d37d9 | ||
|
|
af5e5af4da | ||
|
|
3b1f7ae408 | ||
|
|
0d5e03e72b | ||
|
|
d313d259ca | ||
|
|
3c6d07294a | ||
|
|
e0449a5520 | ||
|
|
342bbb4ab4 | ||
|
|
1bea08a69e | ||
|
|
15a60acb09 | ||
|
|
30b8a6bcbb | ||
|
|
0a6fd6a16e | ||
|
|
760dc480bd | ||
|
|
980154a6f3 | ||
|
|
ccce10bc8a | ||
|
|
c27c661363 | ||
|
|
474075cc21 | ||
|
|
895d4b6534 | ||
|
|
0cbd41245f | ||
|
|
4f8c3efc0e | ||
|
|
6b2b5dab80 | ||
|
|
89cdd823a6 | ||
|
|
43a13a707b | ||
|
|
0aade6ff08 | ||
|
|
7adfc9c244 | ||
|
|
115352b823 | ||
|
|
52188a1ffd | ||
|
|
c65800b889 | ||
|
|
b6dde48fa1 | ||
|
|
e439617a23 | ||
|
|
a4c44627f7 | ||
|
|
04f0ae42a3 | ||
|
|
f6962f4b57 | ||
|
|
07582d055a | ||
|
|
ec98ed0dcd | ||
|
|
b93b7dff67 | ||
|
|
e482db1f9b | ||
|
|
758e4ec240 | ||
|
|
856564ce7d | ||
|
|
ecfbdcab36 | ||
|
|
b37df401be | ||
|
|
6efe30d7e3 | ||
|
|
390833c639 | ||
|
|
ab116247d0 |
26
.gitignore
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
build/
|
||||
*.pbxuser
|
||||
!default.pbxuser
|
||||
*.mode1v3
|
||||
!default.mode1v3
|
||||
*.mode2v3
|
||||
!default.mode2v3
|
||||
*.perspectivev3
|
||||
!default.perspectivev3
|
||||
xcuserdata
|
||||
*.xccheckout
|
||||
*.moved-aside
|
||||
DerivedData
|
||||
*.xcuserstate
|
||||
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
Artwork
|
||||
|
||||
# Files that might appear on external disk
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
Armchair.framework.zip
|
||||
Carthage
|
||||
1
.swift-version
Normal file
@@ -0,0 +1 @@
|
||||
5.0
|
||||
33
Armchair.podspec
Normal file
@@ -0,0 +1,33 @@
|
||||
Pod::Spec.new do |s|
|
||||
|
||||
s.name = "Armchair"
|
||||
s.version = "0.3.7"
|
||||
s.summary = "A simple yet powerful App Review Manager for iOS and OSX in Swift"
|
||||
s.description = <<-DESC
|
||||
A simple yet powerful App Review Manager for iOS and OSX in Swift.
|
||||
* 100% Swift
|
||||
* Both iOS and OS X Support
|
||||
* Fully Configurable at Runtime
|
||||
* Default Localizations for Dozens of Languages
|
||||
* Prevent Rating Prompts on Different Devices
|
||||
* Uses UIApplication/NSApplication Lifecycle Notifications
|
||||
* Easy to Setup
|
||||
* iTunes Affiliate Codes
|
||||
* Ready For Primetime
|
||||
DESC
|
||||
s.homepage = "https://github.com/UrbanApps/Armchair"
|
||||
s.screenshots = "https://raw.githubusercontent.com/UrbanApps/Armchair/assets/armchair-iOS.png", "https://raw.githubusercontent.com/UrbanApps/Armchair/assets/armchair-OSX.png"
|
||||
s.social_media_url = 'https://twitter.com/coneybeare'
|
||||
s.authors = { 'Matt Coneybeare' => 'coneybeare@urbanapps.com' }
|
||||
s.source = { :git => 'https://github.com/UrbanApps/Armchair.git', :tag => s.version }
|
||||
|
||||
s.license = { :type => "MIT", :file => "LICENSE" }
|
||||
|
||||
s.source_files = "Source/*.{h,swift}"
|
||||
s.resources = "Localization/*.lproj"
|
||||
s.ios.deployment_target = '8.0'
|
||||
s.osx.deployment_target = '10.10'
|
||||
s.requires_arc = true
|
||||
s.swift_version = '5.0'
|
||||
|
||||
end
|
||||
830
Armchair.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,830 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
E6A0AF8F19C9D1E800C3A7DC /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF6F19C9D1E800C3A7DC /* ar.lproj */; };
|
||||
E6A0AF9019C9D1E800C3A7DC /* arm.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7019C9D1E800C3A7DC /* arm.lproj */; };
|
||||
E6A0AF9119C9D1E800C3A7DC /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7119C9D1E800C3A7DC /* ca.lproj */; };
|
||||
E6A0AF9219C9D1E800C3A7DC /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7219C9D1E800C3A7DC /* cs.lproj */; };
|
||||
E6A0AF9319C9D1E800C3A7DC /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7319C9D1E800C3A7DC /* da.lproj */; };
|
||||
E6A0AF9419C9D1E800C3A7DC /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7419C9D1E800C3A7DC /* de.lproj */; };
|
||||
E6A0AF9519C9D1E800C3A7DC /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7519C9D1E800C3A7DC /* el.lproj */; };
|
||||
E6A0AF9619C9D1E800C3A7DC /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7619C9D1E800C3A7DC /* en.lproj */; };
|
||||
E6A0AF9719C9D1E800C3A7DC /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7719C9D1E800C3A7DC /* es.lproj */; };
|
||||
E6A0AF9819C9D1E800C3A7DC /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7819C9D1E800C3A7DC /* fi.lproj */; };
|
||||
E6A0AF9919C9D1E800C3A7DC /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7919C9D1E800C3A7DC /* fr.lproj */; };
|
||||
E6A0AF9A19C9D1E800C3A7DC /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7A19C9D1E800C3A7DC /* he.lproj */; };
|
||||
E6A0AF9B19C9D1E800C3A7DC /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7B19C9D1E800C3A7DC /* hu.lproj */; };
|
||||
E6A0AF9C19C9D1E800C3A7DC /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7C19C9D1E800C3A7DC /* id.lproj */; };
|
||||
E6A0AF9D19C9D1E800C3A7DC /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7D19C9D1E800C3A7DC /* it.lproj */; };
|
||||
E6A0AF9E19C9D1E800C3A7DC /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7E19C9D1E800C3A7DC /* ja.lproj */; };
|
||||
E6A0AF9F19C9D1E800C3A7DC /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7F19C9D1E800C3A7DC /* ko.lproj */; };
|
||||
E6A0AFA019C9D1E800C3A7DC /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8019C9D1E800C3A7DC /* ms.lproj */; };
|
||||
E6A0AFA119C9D1E800C3A7DC /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8119C9D1E800C3A7DC /* nb.lproj */; };
|
||||
E6A0AFA219C9D1E800C3A7DC /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8219C9D1E800C3A7DC /* nl.lproj */; };
|
||||
E6A0AFA319C9D1E800C3A7DC /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8319C9D1E800C3A7DC /* pl.lproj */; };
|
||||
E6A0AFA419C9D1E800C3A7DC /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8419C9D1E800C3A7DC /* pt-BR.lproj */; };
|
||||
E6A0AFA519C9D1E800C3A7DC /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8519C9D1E800C3A7DC /* pt.lproj */; };
|
||||
E6A0AFA619C9D1E800C3A7DC /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8619C9D1E800C3A7DC /* ro.lproj */; };
|
||||
E6A0AFA719C9D1E800C3A7DC /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8719C9D1E800C3A7DC /* ru.lproj */; };
|
||||
E6A0AFA819C9D1E800C3A7DC /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8819C9D1E800C3A7DC /* sk.lproj */; };
|
||||
E6A0AFA919C9D1E800C3A7DC /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8919C9D1E800C3A7DC /* sv.lproj */; };
|
||||
E6A0AFAA19C9D1E800C3A7DC /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8A19C9D1E800C3A7DC /* th.lproj */; };
|
||||
E6A0AFAB19C9D1E800C3A7DC /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8B19C9D1E800C3A7DC /* tr.lproj */; };
|
||||
E6A0AFAC19C9D1E800C3A7DC /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8C19C9D1E800C3A7DC /* vi.lproj */; };
|
||||
E6A0AFAD19C9D1E800C3A7DC /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8D19C9D1E800C3A7DC /* zh-Hans.lproj */; };
|
||||
E6A0AFAE19C9D1E800C3A7DC /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8E19C9D1E800C3A7DC /* zh-Hant.lproj */; };
|
||||
E6D8B8F119C756A4001AD043 /* Armchair.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897FF4019AA800700AB5182 /* Armchair.swift */; };
|
||||
E6F6157119C9FFDA00C0B51C /* hu.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7B19C9D1E800C3A7DC /* hu.lproj */; };
|
||||
E6F6157219C9FFDA00C0B51C /* pl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8319C9D1E800C3A7DC /* pl.lproj */; };
|
||||
E6F6157319C9FFDA00C0B51C /* pt.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8519C9D1E800C3A7DC /* pt.lproj */; };
|
||||
E6F6157419C9FFDA00C0B51C /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7619C9D1E800C3A7DC /* en.lproj */; };
|
||||
E6F6157519C9FFDA00C0B51C /* pt-BR.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8419C9D1E800C3A7DC /* pt-BR.lproj */; };
|
||||
E6F6157619C9FFDA00C0B51C /* th.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8A19C9D1E800C3A7DC /* th.lproj */; };
|
||||
E6F6157719C9FFDA00C0B51C /* arm.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7019C9D1E800C3A7DC /* arm.lproj */; };
|
||||
E6F6157819C9FFDA00C0B51C /* nl.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8219C9D1E800C3A7DC /* nl.lproj */; };
|
||||
E6F6157919C9FFDA00C0B51C /* ca.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7119C9D1E800C3A7DC /* ca.lproj */; };
|
||||
E6F6157A19C9FFDA00C0B51C /* ar.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF6F19C9D1E800C3A7DC /* ar.lproj */; };
|
||||
E6F6157B19C9FFDA00C0B51C /* el.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7519C9D1E800C3A7DC /* el.lproj */; };
|
||||
E6F6157C19C9FFDA00C0B51C /* zh-Hans.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8D19C9D1E800C3A7DC /* zh-Hans.lproj */; };
|
||||
E6F6157D19C9FFDA00C0B51C /* ko.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7F19C9D1E800C3A7DC /* ko.lproj */; };
|
||||
E6F6157E19C9FFDA00C0B51C /* ms.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8019C9D1E800C3A7DC /* ms.lproj */; };
|
||||
E6F6157F19C9FFDA00C0B51C /* id.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7C19C9D1E800C3A7DC /* id.lproj */; };
|
||||
E6F6158019C9FFDA00C0B51C /* ru.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8719C9D1E800C3A7DC /* ru.lproj */; };
|
||||
E6F6158119C9FFDA00C0B51C /* da.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7319C9D1E800C3A7DC /* da.lproj */; };
|
||||
E6F6158219C9FFDA00C0B51C /* sk.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8819C9D1E800C3A7DC /* sk.lproj */; };
|
||||
E6F6158319C9FFDA00C0B51C /* ja.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7E19C9D1E800C3A7DC /* ja.lproj */; };
|
||||
E6F6158419C9FFDA00C0B51C /* tr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8B19C9D1E800C3A7DC /* tr.lproj */; };
|
||||
E6F6158519C9FFDA00C0B51C /* nb.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8119C9D1E800C3A7DC /* nb.lproj */; };
|
||||
E6F6158619C9FFDA00C0B51C /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7919C9D1E800C3A7DC /* fr.lproj */; };
|
||||
E6F6158719C9FFDA00C0B51C /* de.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7419C9D1E800C3A7DC /* de.lproj */; };
|
||||
E6F6158819C9FFDA00C0B51C /* es.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7719C9D1E800C3A7DC /* es.lproj */; };
|
||||
E6F6158919C9FFDA00C0B51C /* fi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7819C9D1E800C3A7DC /* fi.lproj */; };
|
||||
E6F6158A19C9FFDA00C0B51C /* he.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7A19C9D1E800C3A7DC /* he.lproj */; };
|
||||
E6F6158B19C9FFDA00C0B51C /* it.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7D19C9D1E800C3A7DC /* it.lproj */; };
|
||||
E6F6158C19C9FFDA00C0B51C /* ro.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8619C9D1E800C3A7DC /* ro.lproj */; };
|
||||
E6F6158D19C9FFDA00C0B51C /* zh-Hant.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8E19C9D1E800C3A7DC /* zh-Hant.lproj */; };
|
||||
E6F6158E19C9FFDA00C0B51C /* sv.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8919C9D1E800C3A7DC /* sv.lproj */; };
|
||||
E6F6158F19C9FFDA00C0B51C /* vi.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF8C19C9D1E800C3A7DC /* vi.lproj */; };
|
||||
E6F6159019C9FFDA00C0B51C /* cs.lproj in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AF7219C9D1E800C3A7DC /* cs.lproj */; };
|
||||
F897FF4119AA800700AB5182 /* Armchair.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897FF4019AA800700AB5182 /* Armchair.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
E6A0AF6519C9CFF400C3A7DC /* Armchair.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Armchair.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E6A0AF6819C9CFF500C3A7DC /* Info-Localizable.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-Localizable.plist"; sourceTree = "<group>"; };
|
||||
E6A0AF6F19C9D1E800C3A7DC /* ar.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ar.lproj; path = Localization/ar.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7019C9D1E800C3A7DC /* arm.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = arm.lproj; path = Localization/arm.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7119C9D1E800C3A7DC /* ca.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ca.lproj; path = Localization/ca.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7219C9D1E800C3A7DC /* cs.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = cs.lproj; path = Localization/cs.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7319C9D1E800C3A7DC /* da.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = da.lproj; path = Localization/da.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7419C9D1E800C3A7DC /* de.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = de.lproj; path = Localization/de.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7519C9D1E800C3A7DC /* el.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = el.lproj; path = Localization/el.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7619C9D1E800C3A7DC /* en.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = en.lproj; path = Localization/en.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7719C9D1E800C3A7DC /* es.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = es.lproj; path = Localization/es.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7819C9D1E800C3A7DC /* fi.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fi.lproj; path = Localization/fi.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7919C9D1E800C3A7DC /* fr.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = fr.lproj; path = Localization/fr.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7A19C9D1E800C3A7DC /* he.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = he.lproj; path = Localization/he.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7B19C9D1E800C3A7DC /* hu.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = hu.lproj; path = Localization/hu.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7C19C9D1E800C3A7DC /* id.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = id.lproj; path = Localization/id.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7D19C9D1E800C3A7DC /* it.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = it.lproj; path = Localization/it.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7E19C9D1E800C3A7DC /* ja.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ja.lproj; path = Localization/ja.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF7F19C9D1E800C3A7DC /* ko.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ko.lproj; path = Localization/ko.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8019C9D1E800C3A7DC /* ms.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ms.lproj; path = Localization/ms.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8119C9D1E800C3A7DC /* nb.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nb.lproj; path = Localization/nb.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8219C9D1E800C3A7DC /* nl.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = nl.lproj; path = Localization/nl.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8319C9D1E800C3A7DC /* pl.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = pl.lproj; path = Localization/pl.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8419C9D1E800C3A7DC /* pt-BR.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "pt-BR.lproj"; path = "Localization/pt-BR.lproj"; sourceTree = "<group>"; };
|
||||
E6A0AF8519C9D1E800C3A7DC /* pt.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = pt.lproj; path = Localization/pt.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8619C9D1E800C3A7DC /* ro.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ro.lproj; path = Localization/ro.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8719C9D1E800C3A7DC /* ru.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ru.lproj; path = Localization/ru.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8819C9D1E800C3A7DC /* sk.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sk.lproj; path = Localization/sk.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8919C9D1E800C3A7DC /* sv.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = sv.lproj; path = Localization/sv.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8A19C9D1E800C3A7DC /* th.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = th.lproj; path = Localization/th.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8B19C9D1E800C3A7DC /* tr.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = tr.lproj; path = Localization/tr.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8C19C9D1E800C3A7DC /* vi.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = vi.lproj; path = Localization/vi.lproj; sourceTree = "<group>"; };
|
||||
E6A0AF8D19C9D1E800C3A7DC /* zh-Hans.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "zh-Hans.lproj"; path = "Localization/zh-Hans.lproj"; sourceTree = "<group>"; };
|
||||
E6A0AF8E19C9D1E800C3A7DC /* zh-Hant.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "zh-Hant.lproj"; path = "Localization/zh-Hant.lproj"; sourceTree = "<group>"; };
|
||||
E6D8B8B519C7274F001AD043 /* Armchair.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Armchair.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E6D8B8F919C756A4001AD043 /* Armchair.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Armchair.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E6D8B92B19C880A9001AD043 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
E6D8B92C19C880A9001AD043 /* ArmchairTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArmchairTests.swift; sourceTree = "<group>"; };
|
||||
E6F6159419C9FFDA00C0B51C /* Armchair.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Armchair.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
F8111E3719A95C8B0040E7D1 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
F8111E3819A95C8B0040E7D1 /* Armchair.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Armchair.h; sourceTree = "<group>"; };
|
||||
F897FF4019AA800700AB5182 /* Armchair.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Armchair.swift; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
E6A0AF6219C9CFF400C3A7DC /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6D8B8F219C756A4001AD043 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6F6156F19C9FFDA00C0B51C /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
F8111E2F19A95C8B0040E7D1 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
E6A0AF6E19C9D1D300C3A7DC /* Localization */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6A0AF6F19C9D1E800C3A7DC /* ar.lproj */,
|
||||
E6A0AF7019C9D1E800C3A7DC /* arm.lproj */,
|
||||
E6A0AF7119C9D1E800C3A7DC /* ca.lproj */,
|
||||
E6A0AF7219C9D1E800C3A7DC /* cs.lproj */,
|
||||
E6A0AF7319C9D1E800C3A7DC /* da.lproj */,
|
||||
E6A0AF7419C9D1E800C3A7DC /* de.lproj */,
|
||||
E6A0AF7519C9D1E800C3A7DC /* el.lproj */,
|
||||
E6A0AF7619C9D1E800C3A7DC /* en.lproj */,
|
||||
E6A0AF7719C9D1E800C3A7DC /* es.lproj */,
|
||||
E6A0AF7819C9D1E800C3A7DC /* fi.lproj */,
|
||||
E6A0AF7919C9D1E800C3A7DC /* fr.lproj */,
|
||||
E6A0AF7A19C9D1E800C3A7DC /* he.lproj */,
|
||||
E6A0AF7B19C9D1E800C3A7DC /* hu.lproj */,
|
||||
E6A0AF7C19C9D1E800C3A7DC /* id.lproj */,
|
||||
E6A0AF7D19C9D1E800C3A7DC /* it.lproj */,
|
||||
E6A0AF7E19C9D1E800C3A7DC /* ja.lproj */,
|
||||
E6A0AF7F19C9D1E800C3A7DC /* ko.lproj */,
|
||||
E6A0AF8019C9D1E800C3A7DC /* ms.lproj */,
|
||||
E6A0AF8119C9D1E800C3A7DC /* nb.lproj */,
|
||||
E6A0AF8219C9D1E800C3A7DC /* nl.lproj */,
|
||||
E6A0AF8319C9D1E800C3A7DC /* pl.lproj */,
|
||||
E6A0AF8419C9D1E800C3A7DC /* pt-BR.lproj */,
|
||||
E6A0AF8519C9D1E800C3A7DC /* pt.lproj */,
|
||||
E6A0AF8619C9D1E800C3A7DC /* ro.lproj */,
|
||||
E6A0AF8719C9D1E800C3A7DC /* ru.lproj */,
|
||||
E6A0AF8819C9D1E800C3A7DC /* sk.lproj */,
|
||||
E6A0AF8919C9D1E800C3A7DC /* sv.lproj */,
|
||||
E6A0AF8A19C9D1E800C3A7DC /* th.lproj */,
|
||||
E6A0AF8B19C9D1E800C3A7DC /* tr.lproj */,
|
||||
E6A0AF8C19C9D1E800C3A7DC /* vi.lproj */,
|
||||
E6A0AF8D19C9D1E800C3A7DC /* zh-Hans.lproj */,
|
||||
E6A0AF8E19C9D1E800C3A7DC /* zh-Hant.lproj */,
|
||||
);
|
||||
name = Localization;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E6D8B92919C880A9001AD043 /* Tests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6D8B92C19C880A9001AD043 /* ArmchairTests.swift */,
|
||||
E6D8B92A19C880A9001AD043 /* Supporting Files */,
|
||||
);
|
||||
path = Tests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E6D8B92A19C880A9001AD043 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6D8B92B19C880A9001AD043 /* Info.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E2919A95C8B0040E7D1 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6A0AF6E19C9D1D300C3A7DC /* Localization */,
|
||||
F8111E3519A95C8B0040E7D1 /* Source */,
|
||||
E6D8B92919C880A9001AD043 /* Tests */,
|
||||
E6D8B8B519C7274F001AD043 /* Armchair.framework */,
|
||||
E6D8B8F919C756A4001AD043 /* Armchair.framework */,
|
||||
E6A0AF6519C9CFF400C3A7DC /* Armchair.bundle */,
|
||||
E6F6159419C9FFDA00C0B51C /* Armchair.bundle */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E3519A95C8B0040E7D1 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F8111E3819A95C8B0040E7D1 /* Armchair.h */,
|
||||
F897FF4019AA800700AB5182 /* Armchair.swift */,
|
||||
F8111E3619A95C8B0040E7D1 /* Supporting Files */,
|
||||
);
|
||||
path = Source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E3619A95C8B0040E7D1 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F8111E3719A95C8B0040E7D1 /* Info.plist */,
|
||||
E6A0AF6819C9CFF500C3A7DC /* Info-Localizable.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
E6A0AF6419C9CFF400C3A7DC /* ArmchairLocalizable */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = E6A0AF6919C9CFF500C3A7DC /* Build configuration list for PBXNativeTarget "ArmchairLocalizable" */;
|
||||
buildPhases = (
|
||||
E6A0AF6119C9CFF400C3A7DC /* Sources */,
|
||||
E6A0AF6219C9CFF400C3A7DC /* Frameworks */,
|
||||
E6A0AF6319C9CFF400C3A7DC /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ArmchairLocalizable;
|
||||
productName = ArmchairLocalizable;
|
||||
productReference = E6A0AF6519C9CFF400C3A7DC /* Armchair.bundle */;
|
||||
productType = "com.apple.product-type.bundle";
|
||||
};
|
||||
E6D8B8EF19C756A4001AD043 /* ArmchairMac */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = E6D8B8F619C756A4001AD043 /* Build configuration list for PBXNativeTarget "ArmchairMac" */;
|
||||
buildPhases = (
|
||||
E6D8B8F019C756A4001AD043 /* Sources */,
|
||||
E6D8B8F219C756A4001AD043 /* Frameworks */,
|
||||
E6D8B8F519C756A4001AD043 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ArmchairMac;
|
||||
productName = Armchair;
|
||||
productReference = E6D8B8F919C756A4001AD043 /* Armchair.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
E6F6156D19C9FFDA00C0B51C /* ArmchairLocalizableMac */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = E6F6159119C9FFDA00C0B51C /* Build configuration list for PBXNativeTarget "ArmchairLocalizableMac" */;
|
||||
buildPhases = (
|
||||
E6F6156E19C9FFDA00C0B51C /* Sources */,
|
||||
E6F6156F19C9FFDA00C0B51C /* Frameworks */,
|
||||
E6F6157019C9FFDA00C0B51C /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = ArmchairLocalizableMac;
|
||||
productName = ArmchairLocalizable;
|
||||
productReference = E6F6159419C9FFDA00C0B51C /* Armchair.bundle */;
|
||||
productType = "com.apple.product-type.bundle";
|
||||
};
|
||||
F8111E3219A95C8B0040E7D1 /* Armchair */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = F8111E4619A95C8B0040E7D1 /* Build configuration list for PBXNativeTarget "Armchair" */;
|
||||
buildPhases = (
|
||||
F8111E2E19A95C8B0040E7D1 /* Sources */,
|
||||
F8111E2F19A95C8B0040E7D1 /* Frameworks */,
|
||||
F8111E3119A95C8B0040E7D1 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Armchair;
|
||||
productName = Armchair;
|
||||
productReference = E6D8B8B519C7274F001AD043 /* Armchair.framework */;
|
||||
productType = "com.apple.product-type.framework";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
F8111E2A19A95C8B0040E7D1 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 1100;
|
||||
ORGANIZATIONNAME = Armchair;
|
||||
TargetAttributes = {
|
||||
E6A0AF6419C9CFF400C3A7DC = {
|
||||
CreatedOnToolsVersion = 6.0;
|
||||
ProvisioningStyle = Manual;
|
||||
};
|
||||
E6D8B8EF19C756A4001AD043 = {
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
F8111E3219A95C8B0040E7D1 = {
|
||||
CreatedOnToolsVersion = 6.0;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = F8111E2D19A95C8B0040E7D1 /* Build configuration list for PBXProject "Armchair" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = F8111E2919A95C8B0040E7D1;
|
||||
productRefGroup = F8111E2919A95C8B0040E7D1;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
F8111E3219A95C8B0040E7D1 /* Armchair */,
|
||||
E6D8B8EF19C756A4001AD043 /* ArmchairMac */,
|
||||
E6A0AF6419C9CFF400C3A7DC /* ArmchairLocalizable */,
|
||||
E6F6156D19C9FFDA00C0B51C /* ArmchairLocalizableMac */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
E6A0AF6319C9CFF400C3A7DC /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6A0AF9B19C9D1E800C3A7DC /* hu.lproj in Resources */,
|
||||
E6A0AFA319C9D1E800C3A7DC /* pl.lproj in Resources */,
|
||||
E6A0AFA519C9D1E800C3A7DC /* pt.lproj in Resources */,
|
||||
E6A0AF9619C9D1E800C3A7DC /* en.lproj in Resources */,
|
||||
E6A0AFA419C9D1E800C3A7DC /* pt-BR.lproj in Resources */,
|
||||
E6A0AFAA19C9D1E800C3A7DC /* th.lproj in Resources */,
|
||||
E6A0AF9019C9D1E800C3A7DC /* arm.lproj in Resources */,
|
||||
E6A0AFA219C9D1E800C3A7DC /* nl.lproj in Resources */,
|
||||
E6A0AF9119C9D1E800C3A7DC /* ca.lproj in Resources */,
|
||||
E6A0AF8F19C9D1E800C3A7DC /* ar.lproj in Resources */,
|
||||
E6A0AF9519C9D1E800C3A7DC /* el.lproj in Resources */,
|
||||
E6A0AFAD19C9D1E800C3A7DC /* zh-Hans.lproj in Resources */,
|
||||
E6A0AF9F19C9D1E800C3A7DC /* ko.lproj in Resources */,
|
||||
E6A0AFA019C9D1E800C3A7DC /* ms.lproj in Resources */,
|
||||
E6A0AF9C19C9D1E800C3A7DC /* id.lproj in Resources */,
|
||||
E6A0AFA719C9D1E800C3A7DC /* ru.lproj in Resources */,
|
||||
E6A0AF9319C9D1E800C3A7DC /* da.lproj in Resources */,
|
||||
E6A0AFA819C9D1E800C3A7DC /* sk.lproj in Resources */,
|
||||
E6A0AF9E19C9D1E800C3A7DC /* ja.lproj in Resources */,
|
||||
E6A0AFAB19C9D1E800C3A7DC /* tr.lproj in Resources */,
|
||||
E6A0AFA119C9D1E800C3A7DC /* nb.lproj in Resources */,
|
||||
E6A0AF9919C9D1E800C3A7DC /* fr.lproj in Resources */,
|
||||
E6A0AF9419C9D1E800C3A7DC /* de.lproj in Resources */,
|
||||
E6A0AF9719C9D1E800C3A7DC /* es.lproj in Resources */,
|
||||
E6A0AF9819C9D1E800C3A7DC /* fi.lproj in Resources */,
|
||||
E6A0AF9A19C9D1E800C3A7DC /* he.lproj in Resources */,
|
||||
E6A0AF9D19C9D1E800C3A7DC /* it.lproj in Resources */,
|
||||
E6A0AFA619C9D1E800C3A7DC /* ro.lproj in Resources */,
|
||||
E6A0AFAE19C9D1E800C3A7DC /* zh-Hant.lproj in Resources */,
|
||||
E6A0AFA919C9D1E800C3A7DC /* sv.lproj in Resources */,
|
||||
E6A0AFAC19C9D1E800C3A7DC /* vi.lproj in Resources */,
|
||||
E6A0AF9219C9D1E800C3A7DC /* cs.lproj in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6D8B8F519C756A4001AD043 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6F6157019C9FFDA00C0B51C /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6F6157119C9FFDA00C0B51C /* hu.lproj in Resources */,
|
||||
E6F6157219C9FFDA00C0B51C /* pl.lproj in Resources */,
|
||||
E6F6157319C9FFDA00C0B51C /* pt.lproj in Resources */,
|
||||
E6F6157419C9FFDA00C0B51C /* en.lproj in Resources */,
|
||||
E6F6157519C9FFDA00C0B51C /* pt-BR.lproj in Resources */,
|
||||
E6F6157619C9FFDA00C0B51C /* th.lproj in Resources */,
|
||||
E6F6157719C9FFDA00C0B51C /* arm.lproj in Resources */,
|
||||
E6F6157819C9FFDA00C0B51C /* nl.lproj in Resources */,
|
||||
E6F6157919C9FFDA00C0B51C /* ca.lproj in Resources */,
|
||||
E6F6157A19C9FFDA00C0B51C /* ar.lproj in Resources */,
|
||||
E6F6157B19C9FFDA00C0B51C /* el.lproj in Resources */,
|
||||
E6F6157C19C9FFDA00C0B51C /* zh-Hans.lproj in Resources */,
|
||||
E6F6157D19C9FFDA00C0B51C /* ko.lproj in Resources */,
|
||||
E6F6157E19C9FFDA00C0B51C /* ms.lproj in Resources */,
|
||||
E6F6157F19C9FFDA00C0B51C /* id.lproj in Resources */,
|
||||
E6F6158019C9FFDA00C0B51C /* ru.lproj in Resources */,
|
||||
E6F6158119C9FFDA00C0B51C /* da.lproj in Resources */,
|
||||
E6F6158219C9FFDA00C0B51C /* sk.lproj in Resources */,
|
||||
E6F6158319C9FFDA00C0B51C /* ja.lproj in Resources */,
|
||||
E6F6158419C9FFDA00C0B51C /* tr.lproj in Resources */,
|
||||
E6F6158519C9FFDA00C0B51C /* nb.lproj in Resources */,
|
||||
E6F6158619C9FFDA00C0B51C /* fr.lproj in Resources */,
|
||||
E6F6158719C9FFDA00C0B51C /* de.lproj in Resources */,
|
||||
E6F6158819C9FFDA00C0B51C /* es.lproj in Resources */,
|
||||
E6F6158919C9FFDA00C0B51C /* fi.lproj in Resources */,
|
||||
E6F6158A19C9FFDA00C0B51C /* he.lproj in Resources */,
|
||||
E6F6158B19C9FFDA00C0B51C /* it.lproj in Resources */,
|
||||
E6F6158C19C9FFDA00C0B51C /* ro.lproj in Resources */,
|
||||
E6F6158D19C9FFDA00C0B51C /* zh-Hant.lproj in Resources */,
|
||||
E6F6158E19C9FFDA00C0B51C /* sv.lproj in Resources */,
|
||||
E6F6158F19C9FFDA00C0B51C /* vi.lproj in Resources */,
|
||||
E6F6159019C9FFDA00C0B51C /* cs.lproj in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
F8111E3119A95C8B0040E7D1 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
E6A0AF6119C9CFF400C3A7DC /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6D8B8F019C756A4001AD043 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6D8B8F119C756A4001AD043 /* Armchair.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
E6F6156E19C9FFDA00C0B51C /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
F8111E2E19A95C8B0040E7D1 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F897FF4119AA800700AB5182 /* Armchair.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
E6A0AF6A19C9CFF500C3A7DC /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = "Source/Info-Localizable.plist";
|
||||
INSTALL_PATH = "";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E6A0AF6B19C9CFF500C3A7DC /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEVELOPMENT_TEAM = "";
|
||||
INFOPLIST_FILE = "Source/Info-Localizable.plist";
|
||||
INSTALL_PATH = "";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = "iphonesimulator iphoneos";
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
E6D8B8F719C756A4001AD043 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E6D8B8F819C756A4001AD043 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEFINES_MODULE = YES;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_MODULE_NAME = "$(PRODUCT_NAME:c99extidentifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||
SWIFT_SWIFT3_OBJC_INFERENCE = Off;
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
E6F6159219C9FFDA00C0B51C /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
INFOPLIST_FILE = "Source/Info-Localizable.plist";
|
||||
INSTALL_PATH = "";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E6F6159319C9FFDA00C0B51C /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
INFOPLIST_FILE = "Source/Info-Localizable.plist";
|
||||
INSTALL_PATH = "";
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
ONLY_ACTIVE_ARCH = NO;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = Armchair;
|
||||
SDKROOT = macosx;
|
||||
SKIP_INSTALL = YES;
|
||||
SUPPORTED_PLATFORMS = macosx;
|
||||
WRAPPER_EXTENSION = bundle;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
F8111E4419A95C8B0040E7D1 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
OTHER_SWIFT_FLAGS = "-DDebug";
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F8111E4519A95C8B0040E7D1 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
VERSIONING_SYSTEM = "apple-generic";
|
||||
VERSION_INFO_PREFIX = "";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
F8111E4719A95C8B0040E7D1 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F8111E4819A95C8B0040E7D1 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = "";
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
DYLIB_CURRENT_VERSION = 1;
|
||||
DYLIB_INSTALL_NAME_BASE = "@rpath";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Source/Info.plist";
|
||||
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SKIP_INSTALL = YES;
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
E6A0AF6919C9CFF500C3A7DC /* Build configuration list for PBXNativeTarget "ArmchairLocalizable" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
E6A0AF6A19C9CFF500C3A7DC /* Debug */,
|
||||
E6A0AF6B19C9CFF500C3A7DC /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
E6D8B8F619C756A4001AD043 /* Build configuration list for PBXNativeTarget "ArmchairMac" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
E6D8B8F719C756A4001AD043 /* Debug */,
|
||||
E6D8B8F819C756A4001AD043 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
E6F6159119C9FFDA00C0B51C /* Build configuration list for PBXNativeTarget "ArmchairLocalizableMac" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
E6F6159219C9FFDA00C0B51C /* Debug */,
|
||||
E6F6159319C9FFDA00C0B51C /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
F8111E2D19A95C8B0040E7D1 /* Build configuration list for PBXProject "Armchair" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F8111E4419A95C8B0040E7D1 /* Debug */,
|
||||
F8111E4519A95C8B0040E7D1 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
F8111E4619A95C8B0040E7D1 /* Build configuration list for PBXNativeTarget "Armchair" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F8111E4719A95C8B0040E7D1 /* Debug */,
|
||||
F8111E4819A95C8B0040E7D1 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = F8111E2A19A95C8B0040E7D1 /* Project object */;
|
||||
}
|
||||
7
Armchair.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Armchair.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
95
Armchair.xcodeproj/xcshareddata/xcschemes/Armchair.xcscheme
Normal file
@@ -0,0 +1,95 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1100"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "F8111E3219A95C8B0040E7D1"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "Armchair"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "F8111E3219A95C8B0040E7D1"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "Armchair"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<Testables>
|
||||
<TestableReference
|
||||
skipped = "NO">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E6D8B92719C880A9001AD043"
|
||||
BuildableName = "ArmchairTests.xctest"
|
||||
BlueprintName = "ArmchairTests"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</TestableReference>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "F8111E3219A95C8B0040E7D1"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "Armchair"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "F8111E3219A95C8B0040E7D1"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "Armchair"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1100"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E6D8B8EF19C756A4001AD043"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "ArmchairMac"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E6D8B8EF19C756A4001AD043"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "ArmchairMac"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "E6D8B8EF19C756A4001AD043"
|
||||
BuildableName = "Armchair.framework"
|
||||
BlueprintName = "ArmchairMac"
|
||||
ReferencedContainer = "container:Armchair.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
13
Armchair.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:Armchair.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:iOS Example.xcodeproj">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:Mac Example.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>IDEDidComputeMac32BitWarning</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
76
Example/AppDelegate.swift
Normal file
@@ -0,0 +1,76 @@
|
||||
// AppDelegate.swift
|
||||
//
|
||||
// Copyright (c) 2014 Armchair (http://github.com/UrbanApps/Armchair)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if os(iOS)
|
||||
|
||||
import UIKit
|
||||
|
||||
@UIApplicationMain
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
var window: UIWindow?
|
||||
|
||||
func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
|
||||
AppDelegate.setupArmchair()
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
let appID = "361309726" // Pages iOS
|
||||
|
||||
#elseif os(OSX)
|
||||
|
||||
import Cocoa
|
||||
|
||||
@NSApplicationMain
|
||||
class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
@IBOutlet weak var window: NSWindow!
|
||||
|
||||
override init() {
|
||||
AppDelegate.setupArmchair()
|
||||
}
|
||||
}
|
||||
|
||||
let appID = "409201541" // Pages Mac
|
||||
|
||||
#else
|
||||
#endif
|
||||
|
||||
import Armchair
|
||||
|
||||
extension AppDelegate {
|
||||
|
||||
class func setupArmchair() {
|
||||
// Normally, all the setup would be here.
|
||||
// But, because we are presenting a few different setups in the example,
|
||||
// The config will be in the view controllers
|
||||
// Armchair.appID("408981381") // Pages
|
||||
//
|
||||
// It is always best to load Armchair as early as possible
|
||||
// because it needs to receive application life-cycle notifications
|
||||
//
|
||||
// NOTE: The appID call always has to go before any other Armchair calls
|
||||
Armchair.appID(appID)
|
||||
Armchair.debugEnabled(true)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
73
Example/Base.lproj/LaunchScreen.storyboard
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6246" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="ekE-KZ-IOg">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6239"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="GLt-TA-m7w">
|
||||
<objects>
|
||||
<viewController id="ekE-KZ-IOg" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="gfL-jH-trc"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="mJm-h3-k3T"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="Gaw-FT-LdY">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="armchair.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="PMt-XF-iHa">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="d2Y-oX-pAK">
|
||||
<rect key="frame" x="20" y="40" width="560" height="100"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ARMCHAIR" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="geY-Mg-MpD">
|
||||
<rect key="frame" x="156" y="10" width="248" height="51"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="44"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.20000000000000001" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerX" secondItem="geY-Mg-MpD" secondAttribute="centerX" id="6O4-RW-9TZ"/>
|
||||
<constraint firstAttribute="width" constant="568" id="6pU-vO-kvt"/>
|
||||
<constraint firstAttribute="height" constant="100" id="ao3-y6-czE"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="100" id="f6k-1p-SZY"/>
|
||||
<constraint firstItem="geY-Mg-MpD" firstAttribute="top" secondItem="d2Y-oX-pAK" secondAttribute="top" constant="10" id="g4t-hY-e27"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="8"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="6pU-vO-kvt"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="d2Y-oX-pAK" firstAttribute="width" secondItem="Gaw-FT-LdY" secondAttribute="width" constant="-40" id="5Dw-1T-0EN"/>
|
||||
<constraint firstItem="PMt-XF-iHa" firstAttribute="width" secondItem="Gaw-FT-LdY" secondAttribute="width" id="FOV-sF-E7h"/>
|
||||
<constraint firstAttribute="centerX" secondItem="d2Y-oX-pAK" secondAttribute="centerX" id="XSm-PT-Kic"/>
|
||||
<constraint firstItem="PMt-XF-iHa" firstAttribute="height" secondItem="Gaw-FT-LdY" secondAttribute="height" id="g5v-Su-tKv"/>
|
||||
<constraint firstAttribute="centerY" secondItem="PMt-XF-iHa" secondAttribute="centerY" id="tq4-Lo-g9v"/>
|
||||
<constraint firstAttribute="centerX" secondItem="PMt-XF-iHa" secondAttribute="centerX" id="vKV-nj-bCA"/>
|
||||
<constraint firstItem="d2Y-oX-pAK" firstAttribute="top" secondItem="gfL-jH-trc" secondAttribute="bottom" constant="20" id="ywk-Yl-ecv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="vtb-BQ-XAg" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="806" y="152"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="armchair.jpg" width="800" height="736"/>
|
||||
</resources>
|
||||
</document>
|
||||
162
Example/Base.lproj/Main.storyboard
Normal file
@@ -0,0 +1,162 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6245" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="d2j-86-NpT">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6238"/>
|
||||
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
|
||||
</dependencies>
|
||||
<scenes>
|
||||
<!--View Controller-->
|
||||
<scene sceneID="j5w-HN-cOS">
|
||||
<objects>
|
||||
<viewController id="d2j-86-NpT" customClass="ViewController" customModule="iOS_Example" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<layoutGuides>
|
||||
<viewControllerLayoutGuide type="top" id="jBK-Sp-EmM"/>
|
||||
<viewControllerLayoutGuide type="bottom" id="MVO-Fx-XzJ"/>
|
||||
</layoutGuides>
|
||||
<view key="view" contentMode="scaleToFill" id="mCe-MJ-dGn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="armchair.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="pjK-Zp-UbQ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="p7K-BU-wrj">
|
||||
<rect key="frame" x="20" y="40" width="560" height="100"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ARMCHAIR" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="XVe-fD-yl8">
|
||||
<rect key="frame" x="156" y="10" width="248" height="51"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="44"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="5ex-RA-hKB">
|
||||
<rect key="frame" x="343" y="64" width="61" height="28"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="14"/>
|
||||
<state key="normal" title="Store-Kit">
|
||||
<color key="titleShadowColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="presentStoreKitPrompt:" destination="d2j-86-NpT" eventType="touchUpInside" id="Jl4-Qp-pVB"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="94v-di-Sgl">
|
||||
<rect key="frame" x="156" y="64" width="62" height="28"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="14"/>
|
||||
<state key="normal" title="Standard">
|
||||
<color key="titleShadowColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="presentStandardPrompt:" destination="d2j-86-NpT" eventType="touchUpInside" id="reN-Av-qJg"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1cx-Uc-icC">
|
||||
<rect key="frame" x="240" y="64" width="79" height="28"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter-Light" family="American Typewriter" pointSize="14"/>
|
||||
<state key="normal" title="Customized">
|
||||
<color key="titleShadowColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="presentCustomizedPrompt:" destination="d2j-86-NpT" eventType="touchUpInside" id="ktB-ju-xvH"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.20000000000000001" colorSpace="calibratedWhite"/>
|
||||
<constraints>
|
||||
<constraint firstItem="94v-di-Sgl" firstAttribute="leading" secondItem="XVe-fD-yl8" secondAttribute="leading" id="6dM-Hy-V73"/>
|
||||
<constraint firstItem="94v-di-Sgl" firstAttribute="bottom" secondItem="p7K-BU-wrj" secondAttribute="bottom" constant="-8" id="8fR-Kg-3vc"/>
|
||||
<constraint firstAttribute="centerX" secondItem="1cx-Uc-icC" secondAttribute="centerX" constant="0.5" id="9bJ-qD-QXL"/>
|
||||
<constraint firstAttribute="height" constant="100" id="JBv-8P-khM"/>
|
||||
<constraint firstItem="XVe-fD-yl8" firstAttribute="trailing" secondItem="5ex-RA-hKB" secondAttribute="trailing" id="S0J-cg-KYM"/>
|
||||
<constraint firstAttribute="centerX" secondItem="XVe-fD-yl8" secondAttribute="centerX" id="Wfm-fh-DS2"/>
|
||||
<constraint firstAttribute="width" constant="568" id="YGh-wE-w7J"/>
|
||||
<constraint firstAttribute="trailing" secondItem="5ex-RA-hKB" secondAttribute="trailing" constant="8" id="Yca-YH-Ux2"/>
|
||||
<constraint firstItem="XVe-fD-yl8" firstAttribute="top" secondItem="p7K-BU-wrj" secondAttribute="top" constant="10" id="hUJ-7i-QXl"/>
|
||||
<constraint firstItem="5ex-RA-hKB" firstAttribute="bottom" secondItem="p7K-BU-wrj" secondAttribute="bottom" constant="-8" id="lTG-a9-uaN"/>
|
||||
<constraint firstItem="94v-di-Sgl" firstAttribute="leading" secondItem="p7K-BU-wrj" secondAttribute="leading" constant="8" id="ulR-E3-LFb"/>
|
||||
<constraint firstAttribute="bottom" secondItem="1cx-Uc-icC" secondAttribute="bottom" constant="8" id="xK7-bN-m4S"/>
|
||||
</constraints>
|
||||
<userDefinedRuntimeAttributes>
|
||||
<userDefinedRuntimeAttribute type="number" keyPath="layer.cornerRadius">
|
||||
<integer key="value" value="8"/>
|
||||
</userDefinedRuntimeAttribute>
|
||||
</userDefinedRuntimeAttributes>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="YGh-wE-w7J"/>
|
||||
<exclude reference="ulR-E3-LFb"/>
|
||||
<exclude reference="Yca-YH-Ux2"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aGK-R4-nip">
|
||||
<rect key="frame" x="260" y="576" width="80" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="4bP-kT-OTg"/>
|
||||
<constraint firstAttribute="width" constant="80" id="68m-Sb-pvw"/>
|
||||
</constraints>
|
||||
<state key="normal" image="logo.png" backgroundImage="logo.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="openUrbanApps:" destination="d2j-86-NpT" eventType="touchUpInside" id="gm5-65-hdf"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Language Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="cRH-yo-5R5">
|
||||
<rect key="frame" x="255" y="148" width="90" height="14"/>
|
||||
<fontDescription key="fontDescription" name="AmericanTypewriter" family="American Typewriter" pointSize="12"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstItem="aGK-R4-nip" firstAttribute="centerX" secondItem="p7K-BU-wrj" secondAttribute="centerX" id="0zC-Sb-exW"/>
|
||||
<constraint firstItem="pjK-Zp-UbQ" firstAttribute="leading" secondItem="mCe-MJ-dGn" secondAttribute="leadingMargin" constant="-16" id="1PY-yN-plZ"/>
|
||||
<constraint firstItem="MVO-Fx-XzJ" firstAttribute="top" secondItem="aGK-R4-nip" secondAttribute="bottom" constant="8" symbolic="YES" id="7FD-1f-35C"/>
|
||||
<constraint firstAttribute="centerX" secondItem="p7K-BU-wrj" secondAttribute="centerX" id="94T-zn-nPn"/>
|
||||
<constraint firstAttribute="centerY" secondItem="pjK-Zp-UbQ" secondAttribute="centerY" id="9s8-qH-i1P"/>
|
||||
<constraint firstItem="pjK-Zp-UbQ" firstAttribute="height" secondItem="mCe-MJ-dGn" secondAttribute="height" id="JIc-fT-UjL"/>
|
||||
<constraint firstAttribute="centerY" secondItem="p7K-BU-wrj" secondAttribute="centerY" constant="244" id="JwD-6n-gDl"/>
|
||||
<constraint firstItem="cRH-yo-5R5" firstAttribute="top" secondItem="p7K-BU-wrj" secondAttribute="bottom" constant="8" id="QNw-JV-8Hj"/>
|
||||
<constraint firstAttribute="centerX" secondItem="pjK-Zp-UbQ" secondAttribute="centerX" id="SKh-dx-lMw"/>
|
||||
<constraint firstAttribute="trailingMargin" secondItem="pjK-Zp-UbQ" secondAttribute="trailing" constant="-16" id="Wco-iZ-WK3"/>
|
||||
<constraint firstItem="pjK-Zp-UbQ" firstAttribute="width" secondItem="mCe-MJ-dGn" secondAttribute="width" id="X4I-1D-UFn"/>
|
||||
<constraint firstAttribute="height" secondItem="pjK-Zp-UbQ" secondAttribute="height" id="Xex-NE-7OZ"/>
|
||||
<constraint firstAttribute="centerX" secondItem="cRH-yo-5R5" secondAttribute="centerX" id="dcA-rF-XxK"/>
|
||||
<constraint firstItem="pjK-Zp-UbQ" firstAttribute="top" secondItem="jBK-Sp-EmM" secondAttribute="bottom" constant="-20" id="edj-sT-3H0"/>
|
||||
<constraint firstItem="MVO-Fx-XzJ" firstAttribute="top" secondItem="pjK-Zp-UbQ" secondAttribute="bottom" id="fbb-mU-rbb"/>
|
||||
<constraint firstItem="p7K-BU-wrj" firstAttribute="trailing" secondItem="mCe-MJ-dGn" secondAttribute="trailingMargin" id="jfw-jd-DBJ"/>
|
||||
<constraint firstItem="p7K-BU-wrj" firstAttribute="leading" secondItem="mCe-MJ-dGn" secondAttribute="leadingMargin" id="jku-or-cjG"/>
|
||||
<constraint firstItem="p7K-BU-wrj" firstAttribute="top" secondItem="jBK-Sp-EmM" secondAttribute="bottom" constant="20" id="pyj-Pq-F78"/>
|
||||
<constraint firstItem="p7K-BU-wrj" firstAttribute="top" secondItem="jBK-Sp-EmM" secondAttribute="bottom" constant="20" id="t4x-qR-OlB"/>
|
||||
<constraint firstAttribute="width" secondItem="p7K-BU-wrj" secondAttribute="width" constant="40" id="u3a-GZ-en3"/>
|
||||
</constraints>
|
||||
<variation key="default">
|
||||
<mask key="constraints">
|
||||
<exclude reference="1PY-yN-plZ"/>
|
||||
<exclude reference="Wco-iZ-WK3"/>
|
||||
<exclude reference="Xex-NE-7OZ"/>
|
||||
<exclude reference="edj-sT-3H0"/>
|
||||
<exclude reference="JwD-6n-gDl"/>
|
||||
<exclude reference="jfw-jd-DBJ"/>
|
||||
<exclude reference="jku-or-cjG"/>
|
||||
<exclude reference="t4x-qR-OlB"/>
|
||||
<exclude reference="fbb-mU-rbb"/>
|
||||
</mask>
|
||||
</variation>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="lJo-8x-S3p"/>
|
||||
<connections>
|
||||
<outlet property="languageLabel" destination="cRH-yo-5R5" id="adV-Qt-4rt"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="hXP-CJ-uQp" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="647" y="-932"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="armchair.jpg" width="800" height="736"/>
|
||||
<image name="logo.png" width="1480" height="306"/>
|
||||
</resources>
|
||||
<color key="tintColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</document>
|
||||
816
Example/Base.lproj/MainMenu.xib
Normal file
@@ -0,0 +1,816 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9060"/>
|
||||
<capability name="box content view" minToolsVersion="7.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||
<connections>
|
||||
<outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||
<customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Mac_Example" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="window" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
|
||||
</connections>
|
||||
</customObject>
|
||||
<viewController id="g9K-Nf-HDk" customClass="ViewController" customModule="Mac_Example" customModuleProvider="target">
|
||||
<connections>
|
||||
<outlet property="languageLabel" destination="TMr-De-pos" id="Pts-ch-UQq"/>
|
||||
<outlet property="view" destination="EiT-Mj-1SZ" id="fYh-cJ-L5u"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
|
||||
<menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
|
||||
<items>
|
||||
<menuItem title="Mac Example" id="1Xt-HY-uBw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Mac Example" systemMenu="apple" id="uQy-DD-JDr">
|
||||
<items>
|
||||
<menuItem title="About Mac Example" id="5kV-Vb-QxS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
|
||||
<menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
|
||||
<menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
|
||||
<menuItem title="Services" id="NMo-om-nkz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
|
||||
<menuItem title="Hide Mac Example" keyEquivalent="h" id="Olw-nP-bQN">
|
||||
<connections>
|
||||
<action selector="hide:" target="-1" id="PnN-Uc-m68"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Show All" id="Kd2-mp-pUS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
|
||||
<menuItem title="Quit Mac Example" keyEquivalent="q" id="4sb-4s-VLi">
|
||||
<connections>
|
||||
<action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="File" id="dMs-cI-mzQ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="File" id="bib-Uj-vzu">
|
||||
<items>
|
||||
<menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
|
||||
<connections>
|
||||
<action selector="newDocument:" target="-1" id="4Si-XN-c54"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
|
||||
<connections>
|
||||
<action selector="openDocument:" target="-1" id="bVn-NM-KNZ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Open Recent" id="tXI-mr-wws">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
|
||||
<items>
|
||||
<menuItem title="Clear Menu" id="vNY-rz-j42">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="clearRecentDocuments:" target="-1" id="Daa-9d-B3U"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
|
||||
<menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
|
||||
<connections>
|
||||
<action selector="performClose:" target="-1" id="HmO-Ls-i7Q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
|
||||
<connections>
|
||||
<action selector="saveDocument:" target="-1" id="teZ-XB-qJY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
|
||||
<connections>
|
||||
<action selector="saveDocumentAs:" target="-1" id="mDf-zr-I0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Revert to Saved" id="KaW-ft-85H">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="revertDocumentToSaved:" target="-1" id="iJ3-Pv-kwq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
|
||||
<menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
|
||||
<modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="runPageLayout:" target="-1" id="Din-rz-gC5"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
|
||||
<connections>
|
||||
<action selector="print:" target="-1" id="qaZ-4w-aoO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Edit" id="5QF-Oa-p0T">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Edit" id="W48-6f-4Dl">
|
||||
<items>
|
||||
<menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
|
||||
<connections>
|
||||
<action selector="undo:" target="-1" id="M6e-cu-g7V"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
|
||||
<connections>
|
||||
<action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
|
||||
<menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
|
||||
<connections>
|
||||
<action selector="cut:" target="-1" id="YJe-68-I9s"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
|
||||
<connections>
|
||||
<action selector="copy:" target="-1" id="G1f-GL-Joy"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
|
||||
<connections>
|
||||
<action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Delete" id="pa3-QI-u2k">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
|
||||
<connections>
|
||||
<action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
|
||||
<menuItem title="Find" id="4EN-yA-p0u">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Find" id="1b7-l0-nxx">
|
||||
<items>
|
||||
<menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
|
||||
<connections>
|
||||
<action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
|
||||
<connections>
|
||||
<action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
|
||||
<items>
|
||||
<menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
|
||||
<connections>
|
||||
<action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
|
||||
<connections>
|
||||
<action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
|
||||
<menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Substitutions" id="9ic-FL-obx">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
|
||||
<items>
|
||||
<menuItem title="Show Substitutions" id="z6F-FW-3nz">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
|
||||
<menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Quotes" id="hQb-2v-fYv">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Dashes" id="rgM-f4-ycn">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smart Links" id="cwL-P1-jid">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Data Detectors" id="tRr-pd-1PS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Text Replacement" id="HFQ-gK-NFA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Transformations" id="2oI-Rn-ZJC">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Transformations" id="c8a-y6-VQd">
|
||||
<items>
|
||||
<menuItem title="Make Upper Case" id="vmV-6d-7jI">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Make Lower Case" id="d9M-CD-aMd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Capitalize" id="UEZ-Bs-lqG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Speech" id="xrE-MZ-jX0">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Speech" id="3rS-ZA-NoH">
|
||||
<items>
|
||||
<menuItem title="Start Speaking" id="Ynk-f8-cLZ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Stop Speaking" id="Oyz-dy-DGm">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Format" id="jxT-CU-nIS">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Format" id="GEO-Iw-cKr">
|
||||
<items>
|
||||
<menuItem title="Font" id="Gi5-1S-RQB">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
|
||||
<items>
|
||||
<menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
|
||||
<connections>
|
||||
<action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
|
||||
<connections>
|
||||
<action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
|
||||
<connections>
|
||||
<action selector="underline:" target="-1" id="FYS-2b-JAY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
|
||||
<menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
|
||||
<connections>
|
||||
<action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
|
||||
<menuItem title="Kern" id="jBQ-r6-VK2">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Kern" id="tlD-Oa-oAM">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="GUa-eO-cwY">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardKerning:" target="-1" id="6dk-9l-Ckg"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="cDB-IK-hbR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffKerning:" target="-1" id="U8a-gz-Maa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Tighten" id="46P-cB-AYj">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="tightenKerning:" target="-1" id="hr7-Nz-8ro"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Loosen" id="ogc-rX-tC1">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="loosenKerning:" target="-1" id="8i4-f9-FKE"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Ligatures" id="o6e-r0-MWq">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="agt-UL-0e3">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useStandardLigatures:" target="-1" id="7uR-wd-Dx6"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use None" id="J7y-lM-qPV">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="turnOffLigatures:" target="-1" id="iX2-gA-Ilz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Use All" id="xQD-1f-W4t">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="useAllLigatures:" target="-1" id="KcB-kA-TuK"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Baseline" id="OaQ-X3-Vso">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Baseline" id="ijk-EB-dga">
|
||||
<items>
|
||||
<menuItem title="Use Default" id="3Om-Ey-2VK">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="unscript:" target="-1" id="0vZ-95-Ywn"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Superscript" id="Rqc-34-cIF">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="superscript:" target="-1" id="3qV-fo-wpU"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Subscript" id="I0S-gh-46l">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="subscript:" target="-1" id="Q6W-4W-IGz"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Raise" id="2h7-ER-AoG">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="raiseBaseline:" target="-1" id="4sk-31-7Q9"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Lower" id="1tx-W0-xDw">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="lowerBaseline:" target="-1" id="OF1-bc-KW4"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
|
||||
<menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
|
||||
<connections>
|
||||
<action selector="orderFrontColorPanel:" target="-1" id="mSX-Xz-DV3"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
|
||||
<menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyFont:" target="-1" id="GJO-xA-L4q"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteFont:" target="-1" id="JfD-CL-leO"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Text" id="Fal-I4-PZk">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Text" id="d9c-me-L2H">
|
||||
<items>
|
||||
<menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
|
||||
<connections>
|
||||
<action selector="alignLeft:" target="-1" id="zUv-R1-uAa"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
|
||||
<connections>
|
||||
<action selector="alignCenter:" target="-1" id="spX-mk-kcS"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Justify" id="J5U-5w-g23">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="alignJustified:" target="-1" id="ljL-7U-jND"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
|
||||
<connections>
|
||||
<action selector="alignRight:" target="-1" id="r48-bG-YeY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
|
||||
<menuItem title="Writing Direction" id="H1b-Si-o9J">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
|
||||
<items>
|
||||
<menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="YGs-j5-SAR">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionNatural:" target="-1" id="qtV-5e-UBP"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="Lbh-J2-qVU">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionLeftToRight:" target="-1" id="S0X-9S-QSf"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="jFq-tB-4Kx">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeBaseWritingDirectionRightToLeft:" target="-1" id="5fk-qB-AqJ"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
|
||||
<menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
</menuItem>
|
||||
<menuItem id="Nop-cj-93Q">
|
||||
<string key="title"> Default</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionNatural:" target="-1" id="lPI-Se-ZHp"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="BgM-ve-c93">
|
||||
<string key="title"> Left to Right</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionLeftToRight:" target="-1" id="caW-Bv-w94"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem id="RB4-Sm-HuC">
|
||||
<string key="title"> Right to Left</string>
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="makeTextWritingDirectionRightToLeft:" target="-1" id="EXD-6r-ZUu"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
|
||||
<menuItem title="Show Ruler" id="vLm-3I-IUL">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="toggleRuler:" target="-1" id="FOx-HJ-KwY"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="copyRuler:" target="-1" id="71i-fW-3W2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
|
||||
<modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="pasteRuler:" target="-1" id="cSh-wd-qM2"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="View" id="H8h-7b-M4v">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="View" id="HyV-fh-RgO">
|
||||
<items>
|
||||
<menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
|
||||
<modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
|
||||
<connections>
|
||||
<action selector="toggleToolbarShown:" target="-1" id="BXY-wc-z0C"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="runToolbarCustomizationPalette:" target="-1" id="pQI-g3-MTW"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Window" id="aUF-d1-5bR">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
|
||||
<items>
|
||||
<menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
|
||||
<connections>
|
||||
<action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem title="Zoom" id="R4o-n2-Eq4">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
<menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
|
||||
<menuItem title="Bring All to Front" id="LE2-aR-0XJ">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<connections>
|
||||
<action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
<menuItem title="Help" id="wpr-3q-Mcd">
|
||||
<modifierMask key="keyEquivalentModifierMask"/>
|
||||
<menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
|
||||
<items>
|
||||
<menuItem title="Mac Example Help" keyEquivalent="?" id="FKE-Sm-Kum">
|
||||
<connections>
|
||||
<action selector="showHelp:" target="-1" id="y7X-2Q-9no"/>
|
||||
</connections>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
</menuItem>
|
||||
</items>
|
||||
</menu>
|
||||
<window title="Mac Example" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" showsToolbarButton="NO" animationBehavior="default" id="QvC-M9-y7g">
|
||||
<windowStyleMask key="styleMask" titled="YES"/>
|
||||
<rect key="contentRect" x="335" y="390" width="400" height="368"/>
|
||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="2537"/>
|
||||
<view key="contentView" id="EiT-Mj-1SZ">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="368"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="JWk-MV-osx">
|
||||
<rect key="frame" x="0.0" y="0.0" width="400" height="368"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="368" id="7CF-lb-e7D"/>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="368" id="YP8-WO-IWe"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="Z1K-eP-EFI"/>
|
||||
<constraint firstAttribute="width" constant="400" id="srN-Ty-yYG"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="armchair" id="cpa-BH-nca"/>
|
||||
</imageView>
|
||||
<box autoresizesSubviews="NO" borderType="line" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="0Gb-KD-yfU">
|
||||
<rect key="frame" x="17" y="250" width="366" height="100"/>
|
||||
<view key="contentView" id="bbk-jP-boF">
|
||||
<rect key="frame" x="1" y="1" width="364" height="98"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YED-uj-VLq">
|
||||
<rect key="frame" x="16" y="29" width="332" height="81"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="328" id="DsT-g1-qyE"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="ARMCHAIR" id="44X-yy-TzG">
|
||||
<font key="font" size="58" name="AmericanTypewriter-Light"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jkm-ga-2sM">
|
||||
<rect key="frame" x="63" y="8" width="85" height="32"/>
|
||||
<contentFilters>
|
||||
<ciFilter name="CIColorControls">
|
||||
<configuration>
|
||||
<real key="inputBrightness" value="1"/>
|
||||
<real key="inputContrast" value="1"/>
|
||||
<null key="inputImage"/>
|
||||
<real key="inputSaturation" value="1"/>
|
||||
</configuration>
|
||||
</ciFilter>
|
||||
</contentFilters>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="bevel" title="Standard" bezelStyle="rounded" alignment="left" imageScaling="proportionallyDown" inset="2" id="V69-cn-Kgl">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="18" name="AmericanTypewriter"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="presentStandardPrompt:" target="g9K-Nf-HDk" id="9aA-tR-lH1"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button wantsLayer="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yGG-Wr-1xP">
|
||||
<rect key="frame" x="211" y="8" width="105" height="32"/>
|
||||
<contentFilters>
|
||||
<ciFilter name="CIColorControls">
|
||||
<configuration>
|
||||
<real key="inputBrightness" value="1"/>
|
||||
<real key="inputContrast" value="1"/>
|
||||
<null key="inputImage"/>
|
||||
<real key="inputSaturation" value="1"/>
|
||||
</configuration>
|
||||
</ciFilter>
|
||||
</contentFilters>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="bevel" title="Customized" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="cV4-59-VPY">
|
||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||
<font key="font" size="18" name="AmericanTypewriter"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="presentCustomizedPrompt:" target="g9K-Nf-HDk" id="4g2-ob-RcM"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerX" secondItem="YED-uj-VLq" secondAttribute="centerX" id="D1u-uE-BYQ"/>
|
||||
<constraint firstItem="yGG-Wr-1xP" firstAttribute="top" secondItem="YED-uj-VLq" secondAttribute="bottom" constant="-11" id="HED-pQ-Syb"/>
|
||||
<constraint firstItem="YED-uj-VLq" firstAttribute="leading" secondItem="jkm-ga-2sM" secondAttribute="leading" constant="-45" id="Krx-CK-vgG"/>
|
||||
<constraint firstItem="YED-uj-VLq" firstAttribute="top" secondItem="0Gb-KD-yfU" secondAttribute="top" constant="-13" id="Yxh-EJ-Gft"/>
|
||||
<constraint firstAttribute="height" constant="94" id="aN9-Sz-28k"/>
|
||||
<constraint firstItem="yGG-Wr-1xP" firstAttribute="trailing" secondItem="YED-uj-VLq" secondAttribute="trailing" constant="-30" id="kVF-vs-OfD"/>
|
||||
<constraint firstItem="jkm-ga-2sM" firstAttribute="bottom" secondItem="yGG-Wr-1xP" secondAttribute="bottom" id="sDl-pK-HF9"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<color key="borderColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="fillColor" name="textColor" catalog="System" colorSpace="catalog"/>
|
||||
</box>
|
||||
<button translatesAutoresizingMaskIntoConstraints="NO" id="OSk-p7-dUM">
|
||||
<rect key="frame" x="312" y="8" width="80" height="16"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="GCp-UZ-7Tt"/>
|
||||
<constraint firstAttribute="width" constant="80" id="GXx-vv-2Cx"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
<buttonCell key="cell" type="bevel" bezelStyle="rounded" image="logo" imagePosition="only" alignment="center" alternateImage="logo" imageScaling="proportionallyDown" inset="2" id="vhG-ei-xnV">
|
||||
<behavior key="behavior" lightByContents="YES"/>
|
||||
<font key="font" metaFont="system"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="openUrbanApps:" target="g9K-Nf-HDk" id="p5P-Rh-N1T"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="TMr-De-pos">
|
||||
<rect key="frame" x="147" y="229" width="106" height="17"/>
|
||||
<animations/>
|
||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" title="Languange Label" id="k5m-JC-DUG">
|
||||
<font key="font" size="12" name="AmericanTypewriter"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="centerY" secondItem="JWk-MV-osx" secondAttribute="centerY" id="1QU-qd-5HF"/>
|
||||
<constraint firstAttribute="centerX" secondItem="JWk-MV-osx" secondAttribute="centerX" id="4MA-hd-vMN"/>
|
||||
<constraint firstItem="0Gb-KD-yfU" firstAttribute="top" secondItem="EiT-Mj-1SZ" secondAttribute="top" constant="20" id="BgQ-mm-2V4"/>
|
||||
<constraint firstAttribute="bottom" secondItem="OSk-p7-dUM" secondAttribute="bottom" constant="8" id="Eg9-AS-cIz"/>
|
||||
<constraint firstAttribute="centerX" secondItem="TMr-De-pos" secondAttribute="centerX" id="H7z-0n-mbL"/>
|
||||
<constraint firstAttribute="trailing" secondItem="0Gb-KD-yfU" secondAttribute="trailing" constant="20" id="Jd9-NU-hNd"/>
|
||||
<constraint firstAttribute="centerX" secondItem="0Gb-KD-yfU" secondAttribute="centerX" id="JvA-go-nfg"/>
|
||||
<constraint firstItem="OSk-p7-dUM" firstAttribute="centerX" secondItem="0Gb-KD-yfU" secondAttribute="centerX" constant="152" id="NDh-HU-3OR"/>
|
||||
<constraint firstItem="0Gb-KD-yfU" firstAttribute="leading" secondItem="EiT-Mj-1SZ" secondAttribute="leading" constant="20" id="SUA-nW-p1P"/>
|
||||
<constraint firstItem="TMr-De-pos" firstAttribute="top" secondItem="0Gb-KD-yfU" secondAttribute="bottom" constant="8" id="b8y-Oh-srw"/>
|
||||
</constraints>
|
||||
<animations/>
|
||||
</view>
|
||||
</window>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="armchair" width="800" height="736"/>
|
||||
<image name="logo" width="1480" height="306"/>
|
||||
</resources>
|
||||
</document>
|
||||
98
Example/Images.xcassets/AppIcon.appiconset/Contents.json
Normal file
@@ -0,0 +1,98 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "20x20",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "29x29",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "40x40",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "iphone",
|
||||
"size" : "60x60",
|
||||
"scale" : "3x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "20x20",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "20x20",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "29x29",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "40x40",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "76x76",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ipad",
|
||||
"size" : "83.5x83.5",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "ios-marketing",
|
||||
"size" : "1024x1024",
|
||||
"scale" : "1x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"orientation" : "portrait",
|
||||
"idiom" : "ipad",
|
||||
"extent" : "full-screen",
|
||||
"minimum-system-version" : "7.0",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"orientation" : "landscape",
|
||||
"idiom" : "ipad",
|
||||
"extent" : "full-screen",
|
||||
"minimum-system-version" : "7.0",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"orientation" : "portrait",
|
||||
"idiom" : "ipad",
|
||||
"extent" : "full-screen",
|
||||
"minimum-system-version" : "7.0",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"orientation" : "landscape",
|
||||
"idiom" : "ipad",
|
||||
"extent" : "full-screen",
|
||||
"minimum-system-version" : "7.0",
|
||||
"scale" : "2x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
||||
71
Example/Info-Mac.plist
Normal file
@@ -0,0 +1,71 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string></string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>ar</string>
|
||||
<string>arm</string>
|
||||
<string>ca</string>
|
||||
<string>cs</string>
|
||||
<string>da</string>
|
||||
<string>de</string>
|
||||
<string>el</string>
|
||||
<string>en</string>
|
||||
<string>es</string>
|
||||
<string>fi</string>
|
||||
<string>fr</string>
|
||||
<string>he</string>
|
||||
<string>hu</string>
|
||||
<string>id</string>
|
||||
<string>it</string>
|
||||
<string>ja</string>
|
||||
<string>ko</string>
|
||||
<string>ms</string>
|
||||
<string>nb</string>
|
||||
<string>nl</string>
|
||||
<string>pl</string>
|
||||
<string>pt-BR</string>
|
||||
<string>pt</string>
|
||||
<string>ro</string>
|
||||
<string>ru</string>
|
||||
<string>sk</string>
|
||||
<string>sv</string>
|
||||
<string>th</string>
|
||||
<string>tr</string>
|
||||
<string>vi</string>
|
||||
<string>zh-Hans</string>
|
||||
<string>zh-Hant</string>
|
||||
</array>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>99</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.developer-tools</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2014 Armchair. All rights reserved.</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
96
Example/Info-iOS.plist
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIcons</key>
|
||||
<dict/>
|
||||
<key>CFBundleIcons~ipad</key>
|
||||
<dict/>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleLocalizations</key>
|
||||
<array>
|
||||
<string>ar</string>
|
||||
<string>arm</string>
|
||||
<string>ca</string>
|
||||
<string>cs</string>
|
||||
<string>da</string>
|
||||
<string>de</string>
|
||||
<string>el</string>
|
||||
<string>en</string>
|
||||
<string>es</string>
|
||||
<string>fi</string>
|
||||
<string>fr</string>
|
||||
<string>he</string>
|
||||
<string>hu</string>
|
||||
<string>id</string>
|
||||
<string>it</string>
|
||||
<string>ja</string>
|
||||
<string>ko</string>
|
||||
<string>ms</string>
|
||||
<string>nb</string>
|
||||
<string>nl</string>
|
||||
<string>pl</string>
|
||||
<string>pt-BR</string>
|
||||
<string>pt</string>
|
||||
<string>ro</string>
|
||||
<string>ru</string>
|
||||
<string>sk</string>
|
||||
<string>sv</string>
|
||||
<string>th</string>
|
||||
<string>tr</string>
|
||||
<string>vi</string>
|
||||
<string>zh-Hans</string>
|
||||
<string>zh-Hant</string>
|
||||
</array>
|
||||
<key>CFBundleName</key>
|
||||
<string>Armchair</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>99</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UILaunchStoryboardName</key>
|
||||
<string>LaunchScreen</string>
|
||||
<key>UIMainStoryboardFile</key>
|
||||
<string>Main</string>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
</array>
|
||||
<key>UIStatusBarTintParameters</key>
|
||||
<dict>
|
||||
<key>UINavigationBar</key>
|
||||
<dict>
|
||||
<key>Style</key>
|
||||
<string>UIBarStyleDefault</string>
|
||||
<key>Translucent</key>
|
||||
<false/>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
228
Example/ViewController.swift
Normal file
@@ -0,0 +1,228 @@
|
||||
// MasterViewController.swift
|
||||
//
|
||||
// Copyright (c) 2014 Armchair (http://github.com/UrbanApps/Armchair)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#if os(iOS)
|
||||
import UIKit
|
||||
class ViewController: UIViewController {
|
||||
@IBOutlet weak var languageLabel: UILabel!
|
||||
}
|
||||
#elseif os(OSX)
|
||||
import Cocoa
|
||||
class ViewController: NSViewController {
|
||||
@IBOutlet weak var languageLabel: NSTextField!
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
|
||||
import Armchair
|
||||
|
||||
extension ViewController {
|
||||
|
||||
#if os(iOS)
|
||||
override func viewDidLoad() {
|
||||
setLanguageLabel()
|
||||
}
|
||||
#elseif os(OSX)
|
||||
|
||||
override func awakeFromNib() {
|
||||
setLanguageLabel()
|
||||
}
|
||||
|
||||
#else
|
||||
#endif
|
||||
|
||||
func setLanguageLabel() {
|
||||
var languageLabelText = ""
|
||||
|
||||
// Only set it if we are using Armchair localizations
|
||||
if !Armchair.useMainAppBundleForLocalizations() {
|
||||
let currentLocalization: NSString = Bundle.main.preferredLocalizations[0] as NSString
|
||||
// Only set it if we are using a different language than this apps development language
|
||||
if let developmentLocalization = Bundle.main.developmentLocalization {
|
||||
if currentLocalization as String != developmentLocalization {
|
||||
languageLabelText = currentLocalization as String
|
||||
if let displayName = (Locale(identifier: currentLocalization as String) as NSLocale).displayName(forKey: NSLocale.Key.identifier, value:currentLocalization) {
|
||||
languageLabelText = "\(displayName): \(currentLocalization)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#if os(iOS)
|
||||
languageLabel.text = languageLabelText
|
||||
#elseif os(OSX)
|
||||
languageLabel.stringValue = languageLabelText
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
|
||||
@IBAction func presentStandardPrompt(_: AnyObject) {
|
||||
resetAppReviewManager()
|
||||
|
||||
// The AppID is the only required setup
|
||||
Armchair.appID(appID)
|
||||
|
||||
// Debug means that it will popup on the next available change
|
||||
Armchair.debugEnabled(true)
|
||||
|
||||
#if os(iOS)
|
||||
// Explicitly disable the storeKit as the default may be true if on iOS 8
|
||||
Armchair.opensInStoreKit(false)
|
||||
#endif
|
||||
|
||||
// true here means it is ok to show, but it doesn't matter because we have debug on.
|
||||
Armchair.userDidSignificantEvent(true)
|
||||
}
|
||||
|
||||
@IBAction func presentCustomizedPrompt(_: AnyObject) {
|
||||
resetAppReviewManager()
|
||||
|
||||
// The AppID is the only required setup
|
||||
Armchair.appID(appID)
|
||||
|
||||
// Debug means that it will popup on the next available change
|
||||
Armchair.debugEnabled(true)
|
||||
|
||||
// This overrides the default value, read from your localized bundle plist
|
||||
Armchair.appName("Pong")
|
||||
|
||||
// This overrides the default value, read from the UAAppReviewManager bundle plist
|
||||
Armchair.reviewTitle("Rate This Shiz")
|
||||
|
||||
// This overrides the default value, read from the UAAppReviewManager bundle plist
|
||||
Armchair.reviewMessage("Yo! I werked rly hard on this shiz yo, hit me up wit some good ratings yo!")
|
||||
|
||||
// This overrides the default value, read from the UAAppReviewManager bundle plist
|
||||
Armchair.cancelButtonTitle("Nah, fool")
|
||||
|
||||
// This overrides the default value, read from the UAAppReviewManager bundle plist
|
||||
Armchair.rateButtonTitle("Hell yeah!")
|
||||
|
||||
// This overrides the default value, read from the UAAppReviewManager bundle plist
|
||||
Armchair.remindButtonTitle("Hit me up later...")
|
||||
|
||||
// This overrides the default value of 30, but it doesn't matter here because of Debug mode enabled
|
||||
Armchair.daysUntilPrompt(420)
|
||||
|
||||
// This overrides the default value of 1, but it doesn't matter here because of Debug mode enabled
|
||||
Armchair.daysBeforeReminding(187)
|
||||
|
||||
// This means that the popup won't show if you have already rated any version of the app, but it doesn't matter here because of Debug mode enabled
|
||||
Armchair.shouldPromptIfRated(false)
|
||||
|
||||
// This overrides the default value of 20, but it doesn't matter here because of Debug mode enabled
|
||||
Armchair.significantEventsUntilPrompt(99)
|
||||
|
||||
// This means that UAAppReviewManager won't track this version if it hasn't already, but it doesn't matter here because of Debug mode enabled
|
||||
Armchair.tracksNewVersions(false)
|
||||
|
||||
// UAAppReviewManager comes with standard translations for dozens of Languages. If you want to provide your own translations instead,
|
||||
// or you change the default title, message or button titles, set this to YES.
|
||||
Armchair.useMainAppBundleForLocalizations(true)
|
||||
|
||||
#if os(iOS)
|
||||
// Explicitly disable the storeKit as the default may be true if on iOS 8
|
||||
Armchair.opensInStoreKit(false)
|
||||
|
||||
// This sets a custom tint color (applies only to UIAlertController).
|
||||
Armchair.tintColor(tintColor: UIColor.brown)
|
||||
#endif
|
||||
|
||||
// This sets the Affiliate code you want to use, but is not required.
|
||||
Armchair.affiliateCode("11l7j9")
|
||||
|
||||
// This sets the Affiliate campaign code for tracking, but is not required.
|
||||
Armchair.affiliateCampaignCode("Armchair-ExampleApp")
|
||||
|
||||
// Armchair is block based, so setup some blocks on events
|
||||
Armchair.onDidDeclineToRate() { print("[Example App] The user just declined to rate") }
|
||||
Armchair.onDidDisplayAlert() { print("[Example App] We just displayed the rating prompt") }
|
||||
Armchair.onDidOptToRate() { print("[Example App] The user just opted to rate") }
|
||||
Armchair.onDidOptToRemindLater({ print("[Example App] The user just opted to remind later") })
|
||||
#if os(iOS)
|
||||
Armchair.onWillPresentModalView({ print("[Example App] About to present the modal view. Animated: \($0)") })
|
||||
Armchair.onDidDismissModalView({ print("[Example App] Just dismissed the modal view. Animated: \($0)") })
|
||||
#endif
|
||||
// Armchair has sensible defaults for the NSUserDefault keys it uses, but you can customize that here
|
||||
Armchair.setKey("kSettingsSignificantEventTally", armchairKeyType: ArmchairKey.SignificantEventCount)
|
||||
|
||||
// You can also call it with a block to circumvent any of Armchair should rate logic.
|
||||
Armchair.userDidSignificantEvent({
|
||||
(trackingInfo: ArmchairTrackingInfo) -> (Bool) in
|
||||
// the trackingInfo.info dictionary has all the keys/value Armchair uses to determine whether or not to show a prompt
|
||||
|
||||
print("[Example App] \(trackingInfo)")
|
||||
|
||||
return true
|
||||
})
|
||||
|
||||
// Or you can set a global one to get one last chance to stop the prompt, or do your own logic
|
||||
Armchair.shouldPromptClosure({
|
||||
(trackingInfo: ArmchairTrackingInfo) -> (Bool) in
|
||||
// the trackingInfo.info dictionary has all the keys/value Armchair uses to determine whether or not to show a prompt
|
||||
|
||||
// This will be called once all other rating conditions have been met, but before the prompt.
|
||||
// If a local ArmchairShouldPromptClosure is called using the local methods, (like immediately above)
|
||||
// this will not be called.
|
||||
//
|
||||
// Return true to allow the prompt, false to stop the presentation.
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
#if os(iOS)
|
||||
@IBAction func presentStoreKitPrompt(_: AnyObject) {
|
||||
resetAppReviewManager()
|
||||
|
||||
// The AppID is the only required setup
|
||||
Armchair.appID(appID)
|
||||
|
||||
// Debug means that it will popup on the next available change
|
||||
Armchair.debugEnabled(true)
|
||||
|
||||
// This overrides the default of NO in iOS 7. Instead of going to the review page in the App Store App,
|
||||
// the user goes to the main page of the app, in side of this app. Downsides are that it doesn't go directly to
|
||||
// reviews and doesn't take affiliate codes
|
||||
Armchair.opensInStoreKit(true)
|
||||
|
||||
// If you are opening in StoreKit, you can change whether or not to animated the push of the View Controller
|
||||
Armchair.usesAnimation(true)
|
||||
|
||||
// true here means it is ok to show, but it doesn't matter because we have debug on.
|
||||
Armchair.userDidSignificantEvent(true)
|
||||
}
|
||||
#endif
|
||||
|
||||
func resetAppReviewManager() {
|
||||
Armchair.resetDefaults()
|
||||
}
|
||||
|
||||
@IBAction func openUrbanApps(_: AnyObject) {
|
||||
if let url = URL(string: "http://urbanapps.com") {
|
||||
#if os(iOS)
|
||||
UIApplication.shared.openURL(url)
|
||||
#elseif os(OSX)
|
||||
NSWorkspace.shared.open(url)
|
||||
#else
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
Example/armchair.jpg
Normal file
|
After Width: | Height: | Size: 257 KiB |
BIN
Example/icon.png
Normal file
|
After Width: | Height: | Size: 256 KiB |
BIN
Example/logo.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
13
Example/main.m
Normal file
@@ -0,0 +1,13 @@
|
||||
//
|
||||
// main.m
|
||||
// Mac Example
|
||||
//
|
||||
// Created by Matt Coneybeare on 9/15/14.
|
||||
// Copyright (c) 2014 Armchair. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
return NSApplicationMain(argc, argv);
|
||||
}
|
||||
19
LICENSE
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2014 Armchair (http://github.com/UrbanApps/Armchair)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
4
Localization/ar.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "إذا كنت تتمتع بإستخدام %@ . اذا هل تمانع بأخذ لحظة لتقيمة؟ فإن ذلك لن يستغرق أكثر من دقيقة واحدة, شكرا لدعمك";
|
||||
"Rate %@" = "%@ قيم";
|
||||
"No, Thanks" = "لا, شكرا";
|
||||
"Remind me later" = "ذكرنى فيما بعد";
|
||||
4
Localization/arm.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Եթե Դուք հաճույքով եք օգտագործում %@-ը, դեմ չե՞ք լինի տրամադրել մեկ րոպե այն գնահատելու համար: Այն չի պահանջի ձեզանից ավելի քան մեկ րոպե: Շնորհակալություն աջակցության համար:";
|
||||
"Rate %@" = "Գնահատել %@-ը";
|
||||
"No, Thanks" = "Ոչ, շնորհակալություն";
|
||||
"Remind me later" = "Հիշեցնել ավելի ուշ";
|
||||
4
Localization/ca.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si li agrada utilitzar %@, li importaria prendre’s un moment per a valorar-lo? No trigarà més d’un minut. Gràcies por la seva col·laboració!";
|
||||
"Rate %@" = "Valorar %@";
|
||||
"No, Thanks" = "No, gràcies";
|
||||
"Remind me later" = "Recordar-m’ho més tard";
|
||||
4
Localization/cs.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Pokud se Vám aplikace %@ líbí, mohli byste ji prosím ohodnotit v App Store? Zabere to jen chvilku. Díky za Vaši podporu!";
|
||||
"Rate %@" = "Ohodnotit %@";
|
||||
"No, Thanks" = "Ne, díky";
|
||||
"Remind me later" = "Možná později";
|
||||
4
Localization/da.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Hvis du synes om at bruge %@, vil vi gerne bede dig om at give en kort bedømmelse af app'en. Det tager kun et enkelt minut. Tak for din hjælp!";
|
||||
"Rate %@" = "Bedøm %@";
|
||||
"No, Thanks" = "Nej tak";
|
||||
"Remind me later" = "Spørg mig senere";
|
||||
4
Localization/de.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Sie nutzen %@ gerne? Dann nehmen Sie sich bitte für eine Bewertung einen Moment Zeit! Es dauert nicht länger als eine Minute. Vielen Dank!";
|
||||
"Rate %@" = "Bewerte %@";
|
||||
"No, Thanks" = "Nein, danke";
|
||||
"Remind me later" = "Später erinnern";
|
||||
4
Localization/el.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Αν σου αρέσει το %@, θα μπορούσες να αφιερώσεις μια στιγμή για να το βαθμολογήσεις; Η διαδικασία είναι πολύ σύντομη. Ευχαριστούμε για τη στήριξη!";
|
||||
"Rate %@" = "Βαθμολόγηση του %@";
|
||||
"No, Thanks" = "Όχι, ευχαριστώ";
|
||||
"Remind me later" = "Υπενθύμιση αργότερα";
|
||||
4
Localization/en.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!";
|
||||
"Rate %@" = "Rate %@";
|
||||
"No, Thanks" = "No, thanks";
|
||||
"Remind me later" = "Remind me later";
|
||||
4
Localization/es.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si le gusta utilizar %@, ¿le importaría valorarlo? No le llevará más de un minuto. ¡Gracias por su colaboración!";
|
||||
"Rate %@" = "Valorar %@";
|
||||
"No, Thanks" = "No, gracias";
|
||||
"Remind me later" = "Recordar más tarde";
|
||||
4
Localization/fi.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jos käytät mielelläsi %@, voisitko käyttää hetken ja arvostella sen? Se ei kestä minuuttia kauempaa. Kiitos tuestasi!";
|
||||
"Rate %@" = "Arvioi %@";
|
||||
"No, Thanks" = "Ei kiitos";
|
||||
"Remind me later" = "Muistuta minua myöhemmin";
|
||||
4
Localization/fr.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Si vous aimez %@, voulez-vous prendre un moment pour l'évaluer ? Cela ne vous prendra pas plus d'une minute. Merci de votre soutien !";
|
||||
"Rate %@" = "Évaluer %@";
|
||||
"No, Thanks" = "Non, merci";
|
||||
"Remind me later" = "Me rappeler plus tard";
|
||||
4
Localization/he.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "אם נהנת להשתמש ב %@, האם תסכים לדרג אותה? זה לא יקח יותר מדקה. תודה על התמיכה!";
|
||||
"Rate %@" = "דרג את %@";
|
||||
"No, Thanks" = "לא תודה";
|
||||
"Remind me later" = "מאוחר יותר";
|
||||
4
Localization/hu.lproj/ArmchairLocalizable.strings
Executable file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Ha tetszik a %@, ne felejtsd el értékelni az App Store-ban! Csak egy perc az egész. Köszönet a támogatásért!";
|
||||
"Rate %@" = "%@ értékelése";
|
||||
"No, Thanks" = "Most inkább nem";
|
||||
"Remind me later" = "Emlékeztess később";
|
||||
4
Localization/id.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jika anda menyukai %@, maukah anda memberikan rating kepada aplikasi ini? Rating hanya memakan waktu kurang dari 1 menit. Terimakasih untuk dukungan anda!";
|
||||
"Rate %@" = "Rating %@";
|
||||
"No, Thanks" = "Tidak, terimakasih";
|
||||
"Remind me later" = "Silakan ingatkan saya lagi";
|
||||
4
Localization/it.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se ti piace %@, perché non dedichi qualche istante a darne una valutazione sull'App Store? Non richiederà più di un minuto. Grazie per il supporto!";
|
||||
"Rate %@" = "Valuta %@";
|
||||
"No, Thanks" = "No, grazie";
|
||||
"Remind me later" = "Ricordamelo più tardi";
|
||||
4
Localization/ja.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "楽しんでいただけたならば簡単なご意見をお願いします。%@を評価しますか?";
|
||||
"Rate %@" = "%@の評価";
|
||||
"No, Thanks" ="いいえ";
|
||||
"Remind me later" = "後で見る";
|
||||
4
Localization/ko.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "%@ 사용이 맘에 드셨나요? 잠시만 시간을 내서 평가를 부탁드리겠습니다. 감사합니다!";
|
||||
"Rate %@" = "%@ 평가하기";
|
||||
"No, Thanks" = "평가하지 않겠습니다";
|
||||
"Remind me later" = "다음에 평가하겠습니다";
|
||||
4
Localization/ms.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jika anda suka %@, bolehkah luangkan sedikit masa untuk beri penarafan? Tak sampai seminit pun. Terima kasih atas sokongan anda!";
|
||||
"Rate %@" = "Tarafkan %@";
|
||||
"No, Thanks" = "Terima kasih saja";
|
||||
"Remind me later" = "Ingatkan saya lain kali";
|
||||
4
Localization/nb.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Hvis du liker å bruke %@, kan du ta deg et øyeblikk for å vurdere den? Det vil ikke ta mer enn ett minutt. Takk for din støtte!";
|
||||
"Rate %@" = "Vurder %@";
|
||||
"No, Thanks" = "Nei, takk";
|
||||
"Remind me later" = "Påminn meg senere";
|
||||
4
Localization/nl.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Als het gebruik van %@ je bevalt, zou je dan een momentje de tijd willen nemen om het te beoordelen? Het duurt nog geen minuut. Bedankt voor je steun!";
|
||||
"Rate %@" = "%@ beoordelen";
|
||||
"No, Thanks" = "Nee, bedankt";
|
||||
"Remind me later" = "Herinner me er later aan";
|
||||
4
Localization/pl.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Jeżeli podoba Ci się korzystanie z %@, może zechciałbyś poświęcić chwilę czasu, aby ocenić aplikację? Nie zajmie Ci to więcej niż minutę. Dziękujemy za pomoc!";
|
||||
"Rate %@" = "Oceń %@";
|
||||
"No, Thanks" = "Nie, dziękuję";
|
||||
"Remind me later" = "Przypomnij później";
|
||||
4
Localization/pt-BR.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!";
|
||||
"Rate %@" = "Avaliar o %@";
|
||||
"No, Thanks" = "Não, obrigado";
|
||||
"Remind me later" = "Mais tarde";
|
||||
4
Localization/pt.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Se você gosta de usar o %@, que tal avaliá-lo? Não levará mais de um minuto. Agradecemos o seu apoio!";
|
||||
"Rate %@" = "Avaliar o %@";
|
||||
"No, Thanks" = "Não, obrigado";
|
||||
"Remind me later" = "Mais tarde";
|
||||
4
Localization/ro.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Dacă îți place %@, acordă-i o notă te rog, nu durează mult. Mulțumim pentru susținere!";
|
||||
"Rate %@" = "Acordă notă pentru %@";
|
||||
"No, Thanks" = "Nu, mulțumesc";
|
||||
"Remind me later" = "Adu-mi aminte mai târziu";
|
||||
4
Localization/ru.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Если Вам нравится %@, пожалуйста, поставьте свою оценку. Это займет у Вас не больше одной минуты.\n Спасибо за поддержку!";
|
||||
"Rate %@" = "Оценить %@";
|
||||
"No, Thanks" = "Нет, спасибо";
|
||||
"Remind me later" = "Напомнить позже";
|
||||
4
Localization/sk.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Pokiaľ sa Vám páči aplikácia %@, mohli by ste ju prosím ohodnotiť v App Store? Zaberie to len chvíľu. Vďaka za Vašu podporu!";
|
||||
"Rate %@" = "Ohodnotiť %@";
|
||||
"No, Thanks" = "Nie, ďakujem";
|
||||
"Remind me later" = "Pripomenúť neskôr";
|
||||
4
Localization/sv.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Om du gillar att använda %@, kan du tänka dig att betygsätta det åt oss? Det tar bara en minut. Tack för hjälpen!";
|
||||
"Rate %@" = "Betygsätt %@";
|
||||
"No, Thanks" = "Nej tack";
|
||||
"Remind me later" = "Påminn mig senare";
|
||||
4
Localization/th.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "ถ้าคุณกำลังใช้ %@ โปรดสละเวลาสักครู่ในการให้อันดับแก่เรา คุณจะเสียเวลาไม่เกินหนึ่งนาที ขอบคุณสำหรับการสนับสนุน!";
|
||||
"Rate %@" = "ให้อันดับ %@";
|
||||
"No, Thanks" = "ไม่ ขอบคุณ";
|
||||
"Remind me later" = "เตือนฉันภายหลัง";
|
||||
4
Localization/tr.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Eğer %@ uygulamasını kullanmaktan keyif alıyorsanız, onu değerlendirmek için zaman ayırabilir misiniz? Desteğiniz için teşekkür ederiz!";
|
||||
"Rate %@" = "%@ uygulamasını değerlendir";
|
||||
"No, Thanks" = "Hayır, teşekkürler";
|
||||
"Remind me later" = "Daha sonra hatırlat";
|
||||
4
Localization/vi.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "Cảm ơn bạn đã sử dụng ứng dụng %@ trong thời gian qua, bạn có thể dành chút thời gian để đánh giá ứng dụng trong AppStore không? Sẽ không mất quá 1 phút nhưng chúng tôi rất trân trọng điều đó!";
|
||||
"Rate %@" = "Đánh giá %@";
|
||||
"No, Thanks" = "Không, xin cảm ơn";
|
||||
"Remind me later" = "Hãy nhắc nhở tôi sau";
|
||||
4
Localization/zh-Hans.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "如果你喜欢使用%@,你介意花一点时间给它评分吗?不会超过一分钟。感谢您的支持!";
|
||||
"Rate %@" = "给%@评分";
|
||||
"No, Thanks" = "不,谢谢";
|
||||
"Remind me later" = "稍后提醒我";
|
||||
4
Localization/zh-Hant.lproj/ArmchairLocalizable.strings
Normal file
@@ -0,0 +1,4 @@
|
||||
"If you enjoy using %@, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!" = "如果你喜歡使用%@,你介意花一點時間給它評分嗎?不會超過一分鐘。感謝您的支持!";
|
||||
"Rate %@" = "給%@評分";
|
||||
"No, Thanks" = "不,謝謝";
|
||||
"Remind me later" = "稍後提醒我";
|
||||
438
Mac Example.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,438 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
E60FA7C019C908FE00179D70 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60FA7BF19C908FE00179D70 /* AppDelegate.swift */; };
|
||||
E60FA7F119C90C7D00179D70 /* armchair.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E60FA7E819C90C7D00179D70 /* armchair.jpg */; };
|
||||
E60FA7F419C90C7D00179D70 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = E60FA7EE19C90C7D00179D70 /* Icon.png */; };
|
||||
E60FA7F519C90C7D00179D70 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E60FA7EF19C90C7D00179D70 /* Images.xcassets */; };
|
||||
E60FA80519C90D8F00179D70 /* Armchair.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E60FA80019C90D3500179D70 /* Armchair.framework */; };
|
||||
E60FA80A19C9123800179D70 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E60FA80919C9123800179D70 /* ViewController.swift */; };
|
||||
E60FA81319C9172A00179D70 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E60FA81119C9172A00179D70 /* MainMenu.xib */; };
|
||||
E60FA81619C91FA300179D70 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = E60FA81519C91FA300179D70 /* logo.png */; };
|
||||
E6F6159E19CA008E00C0B51C /* Armchair.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E6F6159819CA003600C0B51C /* Armchair.bundle */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
E60FA7FD19C90D3500179D70 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6D8B8B519C7274F001AD043;
|
||||
remoteInfo = Armchair;
|
||||
};
|
||||
E60FA7FF19C90D3500179D70 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6D8B8F919C756A4001AD043;
|
||||
remoteInfo = ArmchairMac;
|
||||
};
|
||||
E60FA80319C90D7100179D70 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = E6D8B8EF19C756A4001AD043;
|
||||
remoteInfo = ArmchairMac;
|
||||
};
|
||||
E6F6156819C9FE8900C0B51C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6A0AF6519C9CFF400C3A7DC;
|
||||
remoteInfo = ArmchairLocalizable;
|
||||
};
|
||||
E6F6159719CA003600C0B51C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6F6159419C9FFDA00C0B51C;
|
||||
remoteInfo = ArmchairLocalizableMac;
|
||||
};
|
||||
E6F6159919CA003A00C0B51C /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = E6F6156D19C9FFDA00C0B51C;
|
||||
remoteInfo = ArmchairLocalizableMac;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
E60FA7BA19C908FE00179D70 /* Mac Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Mac Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E60FA7BF19C908FE00179D70 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = Example/AppDelegate.swift; sourceTree = "<group>"; };
|
||||
E60FA7E819C90C7D00179D70 /* armchair.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = armchair.jpg; path = Example/armchair.jpg; sourceTree = SOURCE_ROOT; };
|
||||
E60FA7EE19C90C7D00179D70 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Example/Icon.png; sourceTree = SOURCE_ROOT; };
|
||||
E60FA7EF19C90C7D00179D70 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Example/Images.xcassets; sourceTree = SOURCE_ROOT; };
|
||||
E60FA7F019C90C7D00179D70 /* Info-Mac.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "Info-Mac.plist"; path = "Example/Info-Mac.plist"; sourceTree = SOURCE_ROOT; };
|
||||
E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Armchair.xcodeproj; sourceTree = "<group>"; };
|
||||
E60FA80919C9123800179D70 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = Example/ViewController.swift; sourceTree = "<group>"; };
|
||||
E60FA81219C9172A00179D70 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Example/Base.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; };
|
||||
E60FA81519C91FA300179D70 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = logo.png; path = Example/logo.png; sourceTree = SOURCE_ROOT; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
E60FA7B719C908FE00179D70 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E60FA80519C90D8F00179D70 /* Armchair.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
E60FA7B119C908FE00179D70 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E60FA7E319C909D100179D70 /* Source */,
|
||||
E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */,
|
||||
E60FA7BA19C908FE00179D70 /* Mac Example.app */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E60FA7BC19C908FE00179D70 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E60FA81119C9172A00179D70 /* MainMenu.xib */,
|
||||
E60FA7E819C90C7D00179D70 /* armchair.jpg */,
|
||||
E60FA7EE19C90C7D00179D70 /* Icon.png */,
|
||||
E60FA81519C91FA300179D70 /* logo.png */,
|
||||
E60FA7EF19C90C7D00179D70 /* Images.xcassets */,
|
||||
E60FA7F019C90C7D00179D70 /* Info-Mac.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
path = "Mac Example";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E60FA7E319C909D100179D70 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E60FA7BF19C908FE00179D70 /* AppDelegate.swift */,
|
||||
E60FA80919C9123800179D70 /* ViewController.swift */,
|
||||
E60FA7BC19C908FE00179D70 /* Supporting Files */,
|
||||
);
|
||||
name = Source;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
E60FA7F819C90D3500179D70 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E60FA7FE19C90D3500179D70 /* Armchair.framework */,
|
||||
E60FA80019C90D3500179D70 /* Armchair.framework */,
|
||||
E6F6156919C9FE8900C0B51C /* Armchair.bundle */,
|
||||
E6F6159819CA003600C0B51C /* Armchair.bundle */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
E60FA7B919C908FE00179D70 /* Mac Example */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = E60FA7D419C908FE00179D70 /* Build configuration list for PBXNativeTarget "Mac Example" */;
|
||||
buildPhases = (
|
||||
E60FA7B619C908FE00179D70 /* Sources */,
|
||||
E60FA7B719C908FE00179D70 /* Frameworks */,
|
||||
E60FA7B819C908FE00179D70 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
E60FA80419C90D7100179D70 /* PBXTargetDependency */,
|
||||
E6F6159A19CA003A00C0B51C /* PBXTargetDependency */,
|
||||
);
|
||||
name = "Mac Example";
|
||||
productName = "Mac Example";
|
||||
productReference = E60FA7BA19C908FE00179D70 /* Mac Example.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
E60FA7B219C908FE00179D70 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 1100;
|
||||
ORGANIZATIONNAME = Armchair;
|
||||
TargetAttributes = {
|
||||
E60FA7B919C908FE00179D70 = {
|
||||
CreatedOnToolsVersion = 6.1;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = E60FA7B519C908FE00179D70 /* Build configuration list for PBXProject "Mac Example" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = E60FA7B119C908FE00179D70;
|
||||
productRefGroup = E60FA7B119C908FE00179D70;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = E60FA7F819C90D3500179D70 /* Products */;
|
||||
ProjectRef = E60FA7F719C90D3500179D70 /* Armchair.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
E60FA7B919C908FE00179D70 /* Mac Example */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
E60FA7FE19C90D3500179D70 /* Armchair.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Armchair.framework;
|
||||
remoteRef = E60FA7FD19C90D3500179D70 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E60FA80019C90D3500179D70 /* Armchair.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Armchair.framework;
|
||||
remoteRef = E60FA7FF19C90D3500179D70 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E6F6156919C9FE8900C0B51C /* Armchair.bundle */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = Armchair.bundle;
|
||||
remoteRef = E6F6156819C9FE8900C0B51C /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E6F6159819CA003600C0B51C /* Armchair.bundle */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = Armchair.bundle;
|
||||
remoteRef = E6F6159719CA003600C0B51C /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
E60FA7B819C908FE00179D70 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6F6159E19CA008E00C0B51C /* Armchair.bundle in Resources */,
|
||||
E60FA7F419C90C7D00179D70 /* Icon.png in Resources */,
|
||||
E60FA81619C91FA300179D70 /* logo.png in Resources */,
|
||||
E60FA81319C9172A00179D70 /* MainMenu.xib in Resources */,
|
||||
E60FA7F519C90C7D00179D70 /* Images.xcassets in Resources */,
|
||||
E60FA7F119C90C7D00179D70 /* armchair.jpg in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
E60FA7B619C908FE00179D70 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E60FA80A19C9123800179D70 /* ViewController.swift in Sources */,
|
||||
E60FA7C019C908FE00179D70 /* AppDelegate.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
E60FA80419C90D7100179D70 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = ArmchairMac;
|
||||
targetProxy = E60FA80319C90D7100179D70 /* PBXContainerItemProxy */;
|
||||
};
|
||||
E6F6159A19CA003A00C0B51C /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = ArmchairLocalizableMac;
|
||||
targetProxy = E6F6159919CA003A00C0B51C /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
E60FA81119C9172A00179D70 /* MainMenu.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
E60FA81219C9172A00179D70 /* Base */,
|
||||
);
|
||||
name = MainMenu.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
E60FA7D219C908FE00179D70 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E60FA7D319C908FE00179D70 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = macosx;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 4.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
E60FA7D519C908FE00179D70 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = "Example/Info-Mac.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
E60FA7D619C908FE00179D70 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "-";
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
INFOPLIST_FILE = "Example/Info-Mac.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
E60FA7B519C908FE00179D70 /* Build configuration list for PBXProject "Mac Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
E60FA7D219C908FE00179D70 /* Debug */,
|
||||
E60FA7D319C908FE00179D70 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
E60FA7D419C908FE00179D70 /* Build configuration list for PBXNativeTarget "Mac Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
E60FA7D519C908FE00179D70 /* Debug */,
|
||||
E60FA7D619C908FE00179D70 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = E60FA7B219C908FE00179D70 /* Project object */;
|
||||
}
|
||||
7
Mac Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:Mac Example.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
631
README.md
Normal file
@@ -0,0 +1,631 @@
|
||||

|
||||
|
||||
Armchair is a simple yet powerful App Review Manager for iOS and OSX written in Swift. It is based on [UAAppReviewManager](https://github.com/UrbanApps/UAAppReviewManager) and [Appirater](https://github.com/arashpayan/appirater) but completely rewritten for apps that want to benefit from the power of this new language.
|
||||
|
||||
## Why Armchair?
|
||||
|
||||
The average end-user will only write a review if something is wrong with your App. This leads to an unfairly negative skew in the ratings, when the majority of satisfied customers don’t leave reviews and only the dissatisfied ones do. In order to counter-balance the negatives, Armchair prompts the user to write a review, but only after the developer knows they are satisfied. For example, you may only show the popup if the user has been using it for more than a week, and has done at least 5 significant events (the core functionality of your App). The rules are fully customizable for your App and easy to setup.
|
||||
|
||||
Here are just a few of the things that make Armchair better than the other rating frameworks and repos:
|
||||
|
||||
<img align="center" src="https://raw.githubusercontent.com/UrbanApps/Armchair/assets/swift.png">
|
||||
|
||||
While the tests to prove it seem to be missing, Apple claims that Swift is a lot faster than Objective-C. Enjoy the benefits of using a framework built entirely in Swift, and work with a familiar syntax without having to deal with bridging headers or other Objective-C shenanigans.
|
||||
|
||||
##### Both iOS and OS X Support
|
||||
|
||||
Many developers publish apps for both iOS and OS X. Out of the box, Armchair supports iOS and OS X apps that are sold through the respective App Stores. The API is the same for both with the exception of a handful of iOS specific functions, described in [Usage](#usage).
|
||||
|
||||
##### Fully Configurable at Runtime
|
||||
|
||||
Armchair is fully configurable, even at runtime. This means that the prompt you display can be dynamic, based on the end-user's score or status. The rules that govern how and when it should be shown can all be set the same way, allowing you to have the most control over the presentation and timing of your review prompt.
|
||||
|
||||
##### Default Localizations for Dozens of Languages
|
||||
|
||||
If you choose to use the default Armchair strings for your app, you will get the added benefit of localization in over 32 languages. Otherwise, customization is easy, and overriding the localization strings is a piece of cake, simply by including your own strings files and letting Armchair know.
|
||||
|
||||
|
||||
##### Prevent Rating Prompts on Different Devices
|
||||
|
||||
If your users have the same app, same version installed on two different devices, you really shouldn't pop up the same rating prompt on each one. Armchair allows you to optionally keep your user's usage stats in the `NSUbiquitousKeyValueStore`, or any other store you want to keep track of syncing yourself to prevent dual prompts.
|
||||
|
||||
##### Uses UIApplication/NSApplication Lifecycle Notifications
|
||||
|
||||
Armchair listens for ApplicationDidLaunch and ApplicationWillEnterForeground notifications. This allows you to worry about your app, and not about tracking in your application delegate functions, so there are fewer lines of code for you to write.
|
||||
|
||||
##### Easy to Setup
|
||||
|
||||
It takes only 1 line of code to get started. Armchair is very powerful when digging under the hood, but also very simple to setup for standard configurations.
|
||||
|
||||
##### iTunes Affiliate Codes
|
||||
|
||||
If you are an iTunes Affiliate, you can easily setup Armchair to use your code and campaign. Full disclosure: If you aren't an iTunes Affiliate, the default code used in the app is the author's. It is better to have somebody's code rather than nobody's, so please leave it at the default setting if you aren't going to set one yourself. Think of it as a small token of appreciation for creating and open-sourcing Armchair.
|
||||
|
||||
##### Ready For Primetime
|
||||
|
||||
Armchair is clean code, well documented and well organized. It is easy to understand the logic flow and the purpose of each function. It doesn't mix logic up randomly between Class functions and Instance functions. Its API is clean and predictable.
|
||||
|
||||
---
|
||||
|
||||
<a name="the-golden-rule"></a>
|
||||
|
||||
1. Don't be a dick.
|
||||
|
||||
Seriously. It is easy to piss off your customers by not really considering how the prompting popup interrupts their flow. This was widely discussed in early 2014 by many well-known tech bloggers and caused a big hooplah in the community.
|
||||
|
||||
We think that having an app review prompt is fine, but only when presented at the right time, and only when you don't ask too frequently. The criteria for the smart display of a prompt varies for each app, but consider adding one at the end of a positive user workflow, rather than the beginning.
|
||||
|
||||
Tweak the variables so that you don't annoy your customers, and you will enjoy the maximum benefit from your app review prompting.
|
||||
|
||||
---
|
||||
|
||||
## Screenshots
|
||||
|
||||

|
||||

|
||||
|
||||
## Requirements
|
||||
|
||||
- Xcode 6.1+
|
||||
- iOS 8.0+, Mac OS X 10.10+
|
||||
|
||||
## Installation
|
||||
|
||||
> **Embedded frameworks require a minimum deployment target of iOS 8 or OS X Mavericks (10.9).**
|
||||
>
|
||||
> Armchair is no longer supported on iOS 7 due to the lack of support for frameworks. Without frameworks, running Travis-CI against iOS 7 would require a second duplicated test target. The separate test suite would need to import all the Swift files and the tests would need to be duplicated and re-written. This split would be too difficult to maintain to ensure the highest possible quality of the Armchair ecosystem.
|
||||
|
||||
### CocoaPods
|
||||
|
||||
[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command:
|
||||
|
||||
```bash
|
||||
$ gem install cocoapods
|
||||
```
|
||||
|
||||
> CocoaPods 0.39.0+ is required to build Armchair.
|
||||
|
||||
To integrate Armchair into your Xcode project using CocoaPods, specify it in your `Podfile`:
|
||||
|
||||
```ruby
|
||||
source 'https://github.com/CocoaPods/Specs.git'
|
||||
platform :ios, '8.0'
|
||||
platform :osx, '10.10'
|
||||
use_frameworks!
|
||||
|
||||
pod 'Armchair', '>= 0.3'
|
||||
|
||||
#Add the following in order to automatically set debug flags for armchair in debug builds
|
||||
post_install do |installer|
|
||||
installer.pods_project.targets.each do |target|
|
||||
if target.name == 'Armchair'
|
||||
target.build_configurations.each do |config|
|
||||
if config.name == 'Debug'
|
||||
config.build_settings['OTHER_SWIFT_FLAGS'] = '-DDebug'
|
||||
else
|
||||
config.build_settings['OTHER_SWIFT_FLAGS'] = ''
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Then, run the following command:
|
||||
|
||||
```bash
|
||||
$ pod install
|
||||
```
|
||||
|
||||
### Carthage
|
||||
|
||||
[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
|
||||
|
||||
Once you [install](https://github.com/Carthage/Carthage#installing-carthage) Carthage, you can integrate Armchair into your Xcode project by specifying it in your `Cartfile`:
|
||||
|
||||
```ogdl
|
||||
github "UrbanApps/Armchair"
|
||||
```
|
||||
|
||||
Run `carthage update` to build the framework and drag the built `Armchair.framework` into your Xcode project.
|
||||
|
||||
## Usage
|
||||
|
||||
### Simple 1-line Setup
|
||||
|
||||
Armchair includes sensible defaults as well as reads data from your localized, or unlocalized `info.plist` to set itself up. While everything is configurable, the only **required** item to configure is your App Store ID. This call is the same for iOS and Mac apps, and should be made as part of your App Delegate's `initialize()` function
|
||||
|
||||
```swift
|
||||
Armchair.appID("12345678")
|
||||
```
|
||||
|
||||
That's it to get started. Setting Armchair up with this line uses some sensible default criterion (detailed below) and will present a rating prompt whenever they are met.
|
||||
|
||||
### Custom Configuration
|
||||
|
||||
Optionally, if you are using significant events in your app to track when the user does something of significance, add this line to any place where this event happens, such as a `levelDidFinish` function, or `userDidUploadPhoto` function.
|
||||
|
||||
```swift
|
||||
Armchair.userDidSignificantEvent(true)
|
||||
```
|
||||
|
||||
In order for this to mean anything to Armchair, you also have to set the threshold for significant events. Typically, this, and all other logic configuration settings, should be made as part of your App Delegate's `initialize()` function so it can get the notifications on app launch.
|
||||
|
||||
```swift
|
||||
Armchair.significantEventsUntilPrompt(5)
|
||||
```
|
||||
|
||||
As mentioned above, the `appID` is the only required item to configure. It is used to generate the URL that will link to the page. Most often, this is configured to the App that is currently running, but there may be an instance where you want to set it to another app, such as in an App that reviews other Apps.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.appID() -> String
|
||||
// SETTER
|
||||
Armchair.appID(appID: String)
|
||||
```
|
||||
|
||||
##### Display Strings
|
||||
|
||||
The `appName` is used in several places on the review prompt popup. It can be configured here to customize your message without losing any of the default localizations. By default, Armchair will read the value from your localized, or unlocalized `info.plist`, but you can set it specifically if you want.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.appName() -> String
|
||||
// SETTER
|
||||
Armchair.appName(appName: String)
|
||||
```
|
||||
|
||||
The `reviewTitle` is the title to use on the review prompt popup. It's default value is a localized "Rate \<appName\>", but you can set it to anything you want.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.reviewTitle() -> String
|
||||
// SETTER
|
||||
Armchair.reviewTitle(reviewTitle: String)
|
||||
```
|
||||
|
||||
The `reviewMessage` is the message to use on the review prompt popup. It's default value is a localized "If you enjoy using \<appName\>, would you mind taking a moment to rate it? It won't take more than a minute. Thanks for your support!", but you can change it specifically if you want. However, if you do change it, you will need to provide your own localization strings as shown farther down below.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.reviewMessage() -> String
|
||||
// SETTER
|
||||
Armchair.reviewMessage(reviewMessage: String)
|
||||
```
|
||||
|
||||
The `cancelButtonTitle` is the button title to use on the review prompt popup for the "Cancel" action. Its default value is a localized "No, Thanks"
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.cancelButtonTitle() -> String
|
||||
// SETTER
|
||||
Armchair.cancelButtonTitle(cancelButtonTitle: String)
|
||||
```
|
||||
|
||||
The `rateButtonTitle` is the button title to use on the review prompt popup for the "Rate" action. Its default value is a localized "Rate \<appName\>"
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.rateButtonTitle() -> String
|
||||
// SETTER
|
||||
Armchair.rateButtonTitle(rateButtonTitle: String)
|
||||
```
|
||||
|
||||
The `remindButtonTitle` is the button title to use on the review prompt popup for the "Remind" action. Its default value is a localized "Remind me later"
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.remindButtonTitle() -> String
|
||||
// SETTER
|
||||
Armchair.remindButtonTitle(remindButtonTitle: String)
|
||||
```
|
||||
|
||||
##### Logic
|
||||
|
||||
The `daysUntilPrompt` configuration determines how many days the users will need to have the same version of your App installed before they will be prompted to rate it. It's default is 30 days.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.daysUntilPrompt() -> UInt
|
||||
// SETTER
|
||||
Armchair.daysUntilPrompt(daysUntilPrompt: UInt)
|
||||
```
|
||||
|
||||
The `usesUntilPrompt` configuration determines how many times the user will need to have 'used' the same version of you App before they will be prompted to rate it. Its default is 20 uses.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.usesUntilPrompt() -> UInt
|
||||
// SETTER
|
||||
Armchair.usesUntilPrompt(usesUntilPrompt: UInt)
|
||||
```
|
||||
|
||||
An example of a 'use' would be if the user launched the app, or brings it to the foreground. Armchair keeps track of these internally by listening to UIApplication/NSApplication lifecycle notifications.
|
||||
|
||||
As discussed briefly above, the `significantEventsUntilPrompt` configuration determines how many "significant events" the user will need to have before they will be prompted to rate the App. It defaults to 0 significant events.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.significantEventsUntilPrompt() -> UInt
|
||||
// SETTER
|
||||
Armchair.significantEventsUntilPrompt(significantEventsUntilPrompt: UInt)
|
||||
```
|
||||
|
||||
A significant event can be anything you want to be in your app. In a telephone app, a significant event might be placing or receiving a call. In a game, it might be beating a level or a boss. This is just another layer of filtering that can be used to make sure that only the most loyal of your users are being prompted to rate you on the app store. If you leave this at a value of 0 (default), then this won't be a criterion used for rating. To tell Armchair that the user has performed a significant event, call the function:
|
||||
|
||||
```swift
|
||||
Armchair.userDidSignificantEvent(canPromptForRating: Bool)
|
||||
```
|
||||
|
||||
The `daysBeforeReminding` configuration determines how many days Armchair will wait before reminding the user to rate again, should they select the "Remind Me Later" option on the first alert. It defaults to 1 day. A value of 0 will remove the "Remind Me Later" button and disable this feature.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.daysBeforeReminding() -> UInt
|
||||
// SETTER
|
||||
Armchair.daysBeforeReminding(daysBeforeReminding: UInt)
|
||||
```
|
||||
|
||||
The `tracksNewVersions` configuration determines whether or not Armchair should track a new app version if detected. By default, Armchair tracks **all** new bundle versions. When it detects a new version, it resets the values saved for usage, significant events, popup shown, user action etc... By setting this to `NO` Armchair will **only** track the version it was initialized with, or the one it last knew about. If this setting is set to `true`, Armchair will reset itself after each new version detection. Its default value is `true`.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.tracksNewVersions() -> Bool
|
||||
// SETTER
|
||||
Armchair.tracksNewVersions(tracksNewVersions: Bool)
|
||||
```
|
||||
|
||||
The `shouldPromptIfRated` configuration determines whether or not to show the review prompt to users who have rated the app once before. This setting is a little like the `tracksNewVersions` setting, but a little less nuclear. Setting this to `false` will cause new users of the app to get the popup, but won't ask users who have already been asked for a popup in the past. This is useful if you release small bug-fix versions and don't want to pester your existing users with popups for every minor version, but want to ensure new users get prompted for a review. For example, you might set this to false for every minor build, then when you push a major version upgrade, leave it as true to ask for a rating again. Its default value is `true`.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.shouldPromptIfRated() -> Bool
|
||||
// SETTER
|
||||
Armchair.shouldPromptIfRated(shouldPromptIfRated: Bool)
|
||||
```
|
||||
|
||||
The `useStoreKitReviewPrompt` configuration determines wether or not to try showing the SKStoreReviewController's requestReview() prompt instead of the default prompt. This setting has some effects only on iOS version >= 10.3. It's default value is `false`.
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.useStoreKitReviewPrompt() -> Bool
|
||||
// SETTER
|
||||
Armchair.useStoreKitReviewPrompt(useStoreKitReviewPrompt: Bool)
|
||||
```
|
||||
|
||||
The `useMainAppBundleForLocalizations` configuration is a way to tell Armchair that you are providing your own translations for the review prompt popup strings. This may be because you are just customizing them, or that you have set your own text for the popup. If set to `true`, the main bundle will always be used to load localized strings. You have to include the translations either in a file called `ArmchairLocalizable.strings` or the standard `Localizable.strings`. If set to `false` Armchair will look in its own translation bundle for the translating strings. It's default value is `false`.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.useMainAppBundleForLocalizations() -> Bool
|
||||
// SETTER
|
||||
Armchair.useMainAppBundleForLocalizations(useMainAppBundleForLocalizations: Bool)
|
||||
```
|
||||
|
||||
##### Affiliate Codes
|
||||
|
||||
The `affiliateCode` configuration is optional and is used to configure with the review URL. If you are an Apple Affiliate, enter your code here. If none is set, the author's code will be used as it is better to be set as something rather than nothing. If you want to thank me for making Armchair, feel free to leave this value at it's default.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.affiliateCode() -> String
|
||||
// SETTER
|
||||
Armchair.affiliateCode(affiliateCode: String)
|
||||
```
|
||||
|
||||
The `affiliateCampaignCode` configuration is optional and is used to configure the review URL. It provides context to the affiliate code and defaults to "Armchair-\<appID\>".
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.affiliateCampaignCode() -> String
|
||||
// SETTER
|
||||
Armchair.affiliateCampaignCode(affiliateCampaignCode: String)
|
||||
```
|
||||
|
||||
##### Debug Mode
|
||||
|
||||
The `debugEnabled` configuration is useful for testing how your review prompt popup looks and for testing. Setting it to `true` will show the Armchair alert every time by tricking the app into thinking the conditions for a prompt have been met. Calling this function in a production build (determined when `Debug` swift compiler flag is *not* defined) has no effect. In App Store builds, you don't have to worry about accidentally leaving debug on. The default value of `debugEnabled` is `false`.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.debugEnabled() -> Bool
|
||||
// SETTER
|
||||
Armchair.debugEnabled(debugEnabled: Bool)
|
||||
```
|
||||
|
||||
##### Logging
|
||||
Armchair allows you to set a closure to capture debug log and to plug in the desired logging framework.
|
||||
|
||||
```swift
|
||||
Armchair.logger(logger: ArmchairLogger)
|
||||
```
|
||||
|
||||
##### iOS Only Configuration
|
||||
|
||||
These configuration functions only make sense for iOS builds due to their dependency on iOS-only frameworks and functions.
|
||||
|
||||
The `usesAnimation` configuration determines whether or not Armchair uses animation when presenting a modal `SKStoreProductViewController`. Its default value is `true`.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.usesAnimation() -> Bool
|
||||
// SETTER
|
||||
Armchair.usesAnimation(usesAnimation: Bool)
|
||||
```
|
||||
|
||||
The `tintColor` configuration specifies a tint color that is applied to UIAlertController when `usesAlertController` is true. Its default value is `nil`, which means that tint color is not customized.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.tintColor() -> UIColor?
|
||||
// SETTER
|
||||
Armchair.tintColor(tintColor: UIColor?)
|
||||
```
|
||||
|
||||
The `usesAlertController` configuration determines whether or not Armchair uses a UIAlertController when presenting an alert on iOS 8. By default, we do not use it because the reordering of buttons is not possible in the alert controller as of iOS 8.0. It's default value is `false`. Changing this value does not affect iOS 7 at all.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.usesAlertController() -> Bool
|
||||
// SETTER
|
||||
Armchair.usesAlertController(usesAnimation: Bool)
|
||||
```
|
||||
|
||||
The `opensInStoreKit` configuration determines if Armchair will open the App Store link inside the App using a `SKStoreProductViewController`. By default, this is `false` on iOS 7, and `true` on iOS 8.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.opensInStoreKit() -> Bool
|
||||
// SETTER
|
||||
Armchair.opensInStoreKit(opensInStoreKit: Bool)
|
||||
```
|
||||
|
||||
There are 2 reasons why the default is `false` on iOS 7.
|
||||
|
||||
- The SKStoreProductViewController __does not allow the user to write a review__ (as of iOS 7)!
|
||||
- iTunes affiliate codes do not work (as of iOS 7) inside SKStoreProductViewController.
|
||||
|
||||
### Armchair Functions
|
||||
|
||||
`userDidSignificantEvent(canPromptForRating: Bool)` tells Armchair that the user performed a significant event. A significant event is whatever you want it to be. If your app is used to make VoIP calls, then you might want to call this function whenever the user places a call. If it's a game, you might want to call this whenever the user beats a level boss. If the user has performed enough significant events and used the app enough, you can suppress the rating alert by passing `NO` for `canPromptForRating`. The rating alert will simply be postponed until it is called again with `true` for `canPromptForRating`. The rating alert can also be triggered by `appLaunched:` and `appEnteredForeground:` notifications.
|
||||
|
||||
```swift
|
||||
Armchair.userDidSignificantEvent(canPromptForRating: Bool)
|
||||
```
|
||||
|
||||
In addition to the above functions that can trigger the presentation of the prompt, there is a closure based variant that allows you to customize whether or not this is an appropriate time to display the prompt.
|
||||
|
||||
```swift
|
||||
Armchair.userDidSignificantEvent(shouldPrompt: ArmchairShouldPromptClosure)
|
||||
```
|
||||
|
||||
Read more about these functions below in the [Should-Prompt Closure](#should-prompt-closure) section.
|
||||
|
||||
`showPrompt()` tells Armchair to show the review prompt alert. The prompt will be showed if there is an internet connection available, the user hasn't already declined to rate, hasn't rated the current version and you are tracking new versions. You could call to show the prompt regardless of Armchair settings, for instance, in the case of some special event in your app like positive feedback given.
|
||||
|
||||
```swift
|
||||
Armchair.showPrompt()
|
||||
```
|
||||
|
||||
`showPromptIfNecessary()` tells Armchair to show the review prompt alert if all restrictions have been met. The prompt will be shown if all restrictions are met, there is an internet connection available, the user hasn't declined to rate, hasn't rated current version, and you are tracking new versions. You could call to show the prompt, for instance, in the case of some special event in your app like a user login.
|
||||
|
||||
```swift
|
||||
Armchair.showPromptIfNecessary()
|
||||
```
|
||||
|
||||
The `reviewURLString()` function is the review URL string, generated by substituting the `appID`, `affiliateCode` and `affiliateCampaignCode` into the template URL for the current platform.
|
||||
|
||||
```swift
|
||||
Armchair.reviewURLString() -> String
|
||||
```
|
||||
|
||||
`rateApp()` tells Armchair to open the App Store page where the user can specify a rating for the app. It also records the fact that this has happened, so the user won't be prompted again to rate the app for this version. The only case where you should call this directly is if your app has an explicit "Rate this app" command somewhere. In all other cases, don't worry about calling this — instead, just call the other functions listed above, and let Armchair handle the bookkeeping of deciding when to ask the user whether to rate the app.
|
||||
|
||||
```swift
|
||||
Armchair.rateApp()
|
||||
```
|
||||
|
||||
`ratingConditionsHaveBeenMet()` returns true when all of the setup conditions to display a prompt have been met.
|
||||
|
||||
```swift
|
||||
Armchair.ratingConditionsHaveBeenMet() -> Bool
|
||||
```
|
||||
|
||||
`resetUsageCounters()` resets app usage counters. Calling this method resets UseCount, SignificantEventCount and FirstUseDate (daysUntilPrompt).
|
||||
|
||||
```swift
|
||||
Armchair.resetUsageCounters()
|
||||
```
|
||||
|
||||
`resetAllCounters()` resets all counters. Calling this method resets every value tracked by Armchair.
|
||||
|
||||
```swift
|
||||
Armchair.resetAllCounters()
|
||||
```
|
||||
|
||||
##### iOS Only Functions
|
||||
|
||||
`closeModalPanel()` tells Armchair to immediately close any open rating modal panels for instance, a `SKStoreProductViewController`.
|
||||
|
||||
```swift
|
||||
Armchair.closeModalPanel()
|
||||
```
|
||||
|
||||
### Closures
|
||||
|
||||
Armchair uses optional closures instead of delegate functions for callbacks. Default is nil for all of them.
|
||||
|
||||
```swift
|
||||
Armchair.onDidDisplayAlert(didDisplayAlertClosure: ArmchairClosure?)
|
||||
Armchair.onDidDeclineToRate(didDeclineToRateClosure: ArmchairClosure?)
|
||||
Armchair.onDidOptToRate(didOptToRateClosure: ArmchairClosure?)
|
||||
Armchair.onDidOptToRemindLater(didOptToRemindLaterClosure: ArmchairClosure?)
|
||||
```
|
||||
|
||||
##### iOS Only Closures
|
||||
|
||||
```swift
|
||||
Armchair.onWillPresentModalView(willPresentModalViewClosure: ArmchairAnimateClosure?)
|
||||
Armchair.onDidDismissModalView(didDismissModalViewClosure: ArmchairAnimateClosure?)
|
||||
```
|
||||
|
||||
##### Should-Increment Closure
|
||||
|
||||
```swift
|
||||
Armchair.shouldIncrementUseCountClosure(shouldIncrementUseCountClosure: ArmchairShouldIncrementClosure?)
|
||||
```
|
||||
|
||||
By default Armchair increments the use count every time the app enters the foreground. If you want to suppress this behavior (i.e. not counting a foreground event caused by switching apps during a Facebook login) you can do so with a ArmchairShouldIncrementClosure that returns `false` to ignore a foreground event or `true` to count it as normal.
|
||||
|
||||
##### Should-Prompt Closure
|
||||
|
||||
Armchair allows you to set a closure that is called immediately preceding the display of the popup.
|
||||
|
||||
```swift
|
||||
public typealias ArmchairShouldPromptClosure = (ArmchairTrackingInfo) -> Bool
|
||||
```
|
||||
|
||||
The `ArmchairShouldPromptClosure` passes you the keys and values Armchair used to determine that the prompt should be called (found in the ArmchairTrackingInfo's `info` dictionary), and expects a `Bool` return value on whether or not the prompt should still be displayed. This allows you to have one last chance to do any of your own custom logic to determine whether or not this is an appropriate time to display the prompt.
|
||||
|
||||
```swift
|
||||
Armchair.shouldPromptClosure(shouldPromptClosure: ArmchairShouldPromptClosure?)
|
||||
```
|
||||
|
||||
In addition to the global `shouldPromptClosure`, the Armchair functions that trigger the presentation of the prompt (`showPromptIfNecessary` and `userDidSignificantEvent()`) have their own closure based variant that allows you to customize whether or not this is an appropriate time to display the prompt.
|
||||
|
||||
```swift
|
||||
Armchair.showPrompt(shouldPrompt: ArmchairShouldPromptClosure)
|
||||
Armchair.userDidSignificantEvent(shouldPrompt: ArmchairShouldPromptClosure)
|
||||
```
|
||||
|
||||
When using these functions instead of their `Bool` sister-functions, none of the internal Armchair logic is used to determine whether or not to display the prompt. **Only** your closure is used to decide whether or not it should be presented, based solely on the return value you pass back in the closure. This also means that even the global `shouldPromptClosure()` (if set) will not be called when using these functions.
|
||||
|
||||
**Note:** The `shouldPromptClosure()` is run synchronous and on the main queue, so be sure to handle it appropriately.
|
||||
|
||||
### NSUserDefaults and Keys
|
||||
|
||||
Armchair has sensible defaults for the `NSUserDefaults` keys it uses, but you can customize that here if you want. Get/Set the `NSUserDefaults` keys that store the usage data for Armchair. Default values are all in the form of "\<appID\>_Armchair\<Setting\>"
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.keyForArmchairKeyType(keyType: ArmchairKey) -> String
|
||||
// SETTER
|
||||
Armchair.setKey(key: NSString, armchairKeyType: ArmchairKey)
|
||||
```
|
||||
|
||||
You don't have to use NSUserDefaults as your Key/Value store, though Armchair defaults to using it. If you want to sync your ratings and usage stats across all of your User's devices, you may want to use the `NSUbiquitousKeyValueStore` instead. This will ensure that the user won't be prompted to rate the same version of the same app on separate devices.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.userDefaultsObject() -> ArmchairDefaultsObject?
|
||||
// SETTER
|
||||
Armchair.userDefaultsObject(userDefaultsObject: ArmchairDefaultsObject?)
|
||||
```
|
||||
|
||||
The `userDefaultsObject` can be any object that responds to the `ArmchairDefaultsObject` protocol — essentially a stripped-down version of the NSUserDefaults api:
|
||||
|
||||
```swift
|
||||
@objc public protocol ArmchairDefaultsObject {
|
||||
func objectForKey(defaultName: String) -> AnyObject?
|
||||
func setObject(value: AnyObject?, forKey defaultName: String)
|
||||
func removeObjectForKey(defaultName: String)
|
||||
|
||||
func stringForKey(defaultName: String) -> String?
|
||||
func integerForKey(defaultName: String) -> Int
|
||||
func doubleForKey(defaultName: String) -> Double
|
||||
func boolForKey(defaultName: String) -> Bool
|
||||
|
||||
func setInteger(value: Int, forKey defaultName: String)
|
||||
func setDouble(value: Double, forKey defaultName: String)
|
||||
func setBool(value: Bool, forKey defaultName: String)
|
||||
|
||||
func synchronize() -> Bool
|
||||
}
|
||||
```
|
||||
|
||||
So, to use it with iCloud and the `NSUbiquitousKeyValueStore`, set up like so:
|
||||
|
||||
```swift
|
||||
Armchair.userDefaultsObject(NSUbiquitousKeyValueStoreSubclass.defaultStore())
|
||||
```
|
||||
|
||||
...where you have a subclass that conforms to the protocol.
|
||||
|
||||
You can get/set the `keyPrefix` to the keys above that store the usage data for Armchair. The default value is the `appID`, and it is prepended to the keys for key type. Setting a `keyPrefix` prevents different apps using a shared Key/Value store from overwriting each other.
|
||||
|
||||
```swift
|
||||
// GETTER
|
||||
Armchair.keyPrefix() -> String
|
||||
// SETTER
|
||||
Armchair.keyPrefix(keyPrefix: String)
|
||||
```
|
||||
|
||||
### Configuration/Usage Examples
|
||||
|
||||
For more information on how to use and setup Armchair, please see the Example Project for both iOS and OS X Apps.
|
||||
|
||||
## Armchair vs. Appirater
|
||||
|
||||
[Appirater](https://github.com/arashpayan/appirater) is great and has been used by many, many developers since its introduction in 2009. It has been updated throughout the years and suits the need of many people, yet leaves a ton left to be desired for the experienced developer. Appirater is:
|
||||
|
||||
- [ ] Not available in Swift
|
||||
- [ ] Only available for iOS
|
||||
- [ ] Mixes a bunch of class methods and instance methods unnecessarily
|
||||
- [ ] Relies on a confusing mixture of MACROS and runtime configs for setup when either way would be better on its own
|
||||
- [ ] Utilizes the ancient Delegate pattern for callbacks in the age of Blocks and Closures
|
||||
- [ ] Is not able to be disabled on minor patch updates
|
||||
- [ ] No iTunes affiliate support
|
||||
- [ ] No way to prevent dual prompts for the same app and version on two separate devices
|
||||
- [ ] Makes the implementer write more code for lifecycle events
|
||||
|
||||
I started addressing these issues in a fork of Appirater, but quickly realized that the entire project could be re-written in a better way to address the above points. Armchair is:
|
||||
|
||||
- [x] Using a full Swift implemention
|
||||
- [x] Available for iOS and Mac
|
||||
- [x] Runs as a Singleton, with Class level, pass-through convenience methods.
|
||||
- [x] Every aspect is configurable at runtime through an established API.
|
||||
- [x] Uses Closures for all event callbacks and notifications.
|
||||
- [x] Allows developers to disable the prompt easily on minor updates
|
||||
- [x] Allows iTunes affiliate codes to be used.
|
||||
- [x] Allows you to prevent prompts for the same app and version on two separate devices
|
||||
- [x] Makes the implementer write less code by listening to notifications of lifecycle events
|
||||
|
||||
Once all these additions, alteration and features were added, it was too much to push back up to Appirater, so Armchair was born. That being said, some of the existing code logic, methods, and language translations (over 32 of them!) are used from [Appirater](https://github.com/arashpayan/appirater) and due credit needs to be given. Armchair could not have existed without it. Thank you!
|
||||
|
||||
## Armchair vs. UAAppReviewManager
|
||||
|
||||
[UAAppReviewManager](https://github.com/UrbanApps/UAAppreviewManager) is like the ugly twin sister of Armchair. They are written by the same person, and have a very similar API, logic and feel. The main difference is that Armchair is rewritten from scratch in Swift and is meant for newer projects that are also using Swift.
|
||||
|
||||
## Upgrading From Appirater or UAAppReviewManager
|
||||
|
||||
Armchair will automatically convert the NSUserDefault keys stored under Appirater/UAAppReviewManager apps into the default keys used by Armchair. The values will transfer over, and the old, unused Appirater/UAAppReviewManager keys will be deleted from the settings automatically.
|
||||
|
||||
## What's Planned?
|
||||
|
||||
There are some ideas we have for future versions of Armchair. Feel free to fork/implement if you would like to expedite the process.
|
||||
|
||||
- Get 100% Unit Test coverage
|
||||
- Add the ability to present the prompt using a custom class other than a `UIAlertView`, `UIAlertController` or `NSAlert`
|
||||
- Add additional localizations: ongoing
|
||||
- [Your idea](https://github.com/UrbanApps/Armchair/issues)
|
||||
|
||||
## Bugs / Pull Requests
|
||||
Let us know if you see ways to improve Armchair or see something wrong with it. We are happy to pull in pull requests that have clean code, and have features that are useful for most people. While the Swift community is still deciding on proper code structure and style, please refrain from simple style complaints (space > tabs, etc...)
|
||||
|
||||
## What Does Armchair stand for?
|
||||
The "Arm" is for App Review Manager. The chair is so we could have a cool picture on the page.
|
||||
|
||||
## Who makes Armchair?
|
||||
[Matt Coneybeare](http://matt.coneybeare.me) of [Urban Apps](http://urbanapps.com). We make neat stuff. Check us out.
|
||||
|
||||
## Other Open-Source Urban Apps Projects
|
||||
|
||||
- [UAAppReviewManager](https://github.com/UrbanApps/UAAppReviewManager) - A review prompting tool for iOS and Mac App Store apps (Obj-C)
|
||||
- [UAModalPanel](https://github.com/UrbanApps/UAModalPanel) - An animated modal panel alternative for iOS
|
||||
- [UALogger](https://github.com/UrbanApps/UALogger) - A logging utility for Mac/iOS apps
|
||||
- [UAObfuscatedString](https://github.com/UrbanApps/UAObfuscatedString) - A simple NSString category to hide sensitive strings
|
||||
- [UAProgressView](https://github.com/UrbanApps/UAProgressView) - A simple and lightweight, yet powerful animated circular progress view
|
||||
- [Urban](https://github.com/UrbanApps/Urban) - An Xcode color scheme that uses a soft dark background, with subtle blue, orange and yellow colors
|
||||
|
||||
## License
|
||||
|
||||
Armchair is released under an MIT license. See [LICENSE](https://github.com/UrbanApps/Armchair/blob/master/LICENSE) for more information.
|
||||
26
Source/Armchair.h
Normal file
@@ -0,0 +1,26 @@
|
||||
// Armchair.h
|
||||
//
|
||||
// Copyright (c) 2014 Armchair (http://github.com/UrbanApps/Armchair)
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// THE SOFTWARE.
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
FOUNDATION_EXPORT double ArmchairVersionNumber;
|
||||
FOUNDATION_EXPORT const unsigned char ArmchairVersionString[];
|
||||
1872
Source/Armchair.swift
Normal file
28
Source/Info-Localizable.plist
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright © 2014 Armchair. All rights reserved.</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
26
Source/Info.plist
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
</plist>
|
||||
38
Tests/ArmchairTests.swift
Normal file
@@ -0,0 +1,38 @@
|
||||
//
|
||||
// ArmchairTests.swift
|
||||
// ArmchairTests
|
||||
//
|
||||
// Created by Matt Coneybeare on 9/16/14.
|
||||
// Copyright (c) 2014 Armchair. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import XCTest
|
||||
import Armchair
|
||||
|
||||
class ArmchairTests: XCTestCase {
|
||||
|
||||
var appID: String! = "987654321"
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
|
||||
Armchair.appID(appID)
|
||||
}
|
||||
|
||||
// MARK: -
|
||||
|
||||
func testAppIDSetProperly() {
|
||||
XCTAssertEqual(Armchair.appID, appID, "appID should be as set")
|
||||
}
|
||||
|
||||
// Need to figure out a way to get the test suite to load the correct info.plist bundle for the test app
|
||||
// func testAppNameReadFromBundleCorrectly() {
|
||||
// XCTAssertEqual(Armchair.appName(), "Armchair Tests")
|
||||
// }
|
||||
|
||||
func testAppNameNotNil() {
|
||||
XCTAssertNotNil(Armchair.appName(), "appName should never be nil")
|
||||
}
|
||||
|
||||
}
|
||||
26
Tests/Info.plist
Normal file
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Armchair Tests</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>$(PRODUCT_NAME)</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
armchair-OSX.png
|
Before Width: | Height: | Size: 624 KiB |
BIN
armchair-iOS.png
|
Before Width: | Height: | Size: 166 KiB |
BIN
armchair.png
|
Before Width: | Height: | Size: 563 KiB |
BIN
golden-rule.png
|
Before Width: | Height: | Size: 9.5 KiB |
490
iOS Example.xcodeproj/project.pbxproj
Normal file
@@ -0,0 +1,490 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
E60FA81819C9219600179D70 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = E60FA81719C9219600179D70 /* logo.png */; };
|
||||
E66F854A19D0A7C600AD80EC /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E66F854819D0A7C600AD80EC /* LaunchScreen.storyboard */; };
|
||||
E6A0AFB419C9D30900C3A7DC /* Armchair.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E6A0AFB319C9D24000C3A7DC /* Armchair.bundle */; };
|
||||
E6D06B5B19CB413600DE5D11 /* Armchair.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6D8B8BB19C7382B001AD043 /* Armchair.framework */; };
|
||||
E6D06B5C19CB413600DE5D11 /* Armchair.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E6D8B8BB19C7382B001AD043 /* Armchair.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||
E6E5F4C319C8E18E008A6C1B /* armchair.jpg in Resources */ = {isa = PBXBuildFile; fileRef = E6E5F4C219C8E18E008A6C1B /* armchair.jpg */; };
|
||||
E6E5F4CD19C8E388008A6C1B /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = E6E5F4CC19C8E388008A6C1B /* Icon.png */; };
|
||||
E6E5F4CF19C8E3C6008A6C1B /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E6E5F4CE19C8E3C6008A6C1B /* Images.xcassets */; };
|
||||
F8111E0B19A951050040E7D1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8111E0A19A951050040E7D1 /* AppDelegate.swift */; };
|
||||
F8111E0D19A951050040E7D1 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8111E0C19A951050040E7D1 /* ViewController.swift */; };
|
||||
F8111E1219A951050040E7D1 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F8111E1019A951050040E7D1 /* Main.storyboard */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
E6A0AFAF19C9D24000C3A7DC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = E6A0AF6419C9CFF400C3A7DC;
|
||||
remoteInfo = ArmchairLocalizable;
|
||||
};
|
||||
E6A0AFB219C9D24000C3A7DC /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6A0AF6519C9CFF400C3A7DC;
|
||||
remoteInfo = ArmchairLocalizable;
|
||||
};
|
||||
E6D06B5519CB412500DE5D11 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6F6159419C9FFDA00C0B51C;
|
||||
remoteInfo = ArmchairLocalizableMac;
|
||||
};
|
||||
E6D06B5919CB412500DE5D11 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = F8111E3219A95C8B0040E7D1;
|
||||
remoteInfo = Armchair;
|
||||
};
|
||||
E6D06B5D19CB413600DE5D11 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = F8111E3219A95C8B0040E7D1;
|
||||
remoteInfo = Armchair;
|
||||
};
|
||||
E6D8B8BA19C7382B001AD043 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6D8B8B519C7274F001AD043;
|
||||
remoteInfo = Armchair;
|
||||
};
|
||||
E6E5F4C019C8E156008A6C1B /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
proxyType = 2;
|
||||
remoteGlobalIDString = E6D8B8F919C756A4001AD043;
|
||||
remoteInfo = ArmchairMac;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXCopyFilesBuildPhase section */
|
||||
E6D06B5F19CB413600DE5D11 /* Embed Frameworks */ = {
|
||||
isa = PBXCopyFilesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
dstPath = "";
|
||||
dstSubfolderSpec = 10;
|
||||
files = (
|
||||
E6D06B5C19CB413600DE5D11 /* Armchair.framework in Embed Frameworks */,
|
||||
);
|
||||
name = "Embed Frameworks";
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
939461E32333725B00C8A00E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||
939461E42333725B00C8A00E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||
E60FA81719C9219600179D70 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
|
||||
E6C49DC519C23C91006A4544 /* iOS Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "iOS Example.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
E6E5F4C219C8E18E008A6C1B /* armchair.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = armchair.jpg; sourceTree = "<group>"; };
|
||||
E6E5F4CC19C8E388008A6C1B /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = "<group>"; };
|
||||
E6E5F4CE19C8E3C6008A6C1B /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||
F8111E0919A951050040E7D1 /* Info-iOS.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Info-iOS.plist"; sourceTree = "<group>"; };
|
||||
F8111E0A19A951050040E7D1 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
F8111E0C19A951050040E7D1 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
|
||||
F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Armchair.xcodeproj; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
F8111E0219A951050040E7D1 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6D06B5B19CB413600DE5D11 /* Armchair.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
E6C9055519C6432200F41311 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6D8B8BB19C7382B001AD043 /* Armchair.framework */,
|
||||
E6E5F4C119C8E156008A6C1B /* Armchair.framework */,
|
||||
E6A0AFB319C9D24000C3A7DC /* Armchair.bundle */,
|
||||
E6D06B5619CB412500DE5D11 /* Armchair.bundle */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111DFC19A951050040E7D1 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F8111E0719A951050040E7D1 /* Source */,
|
||||
F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */,
|
||||
E6C49DC519C23C91006A4544 /* iOS Example.app */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E0719A951050040E7D1 /* Source */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
F8111E0A19A951050040E7D1 /* AppDelegate.swift */,
|
||||
F8111E0C19A951050040E7D1 /* ViewController.swift */,
|
||||
F8111E1019A951050040E7D1 /* Main.storyboard */,
|
||||
E66F854819D0A7C600AD80EC /* LaunchScreen.storyboard */,
|
||||
F8111E0819A951050040E7D1 /* Supporting Files */,
|
||||
);
|
||||
name = Source;
|
||||
path = Example;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E0819A951050040E7D1 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
E6E5F4CE19C8E3C6008A6C1B /* Images.xcassets */,
|
||||
E6E5F4CC19C8E388008A6C1B /* Icon.png */,
|
||||
E6E5F4C219C8E18E008A6C1B /* armchair.jpg */,
|
||||
E60FA81719C9219600179D70 /* logo.png */,
|
||||
F8111E0919A951050040E7D1 /* Info-iOS.plist */,
|
||||
);
|
||||
name = "Supporting Files";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
F8111E0419A951050040E7D1 /* iOS Example */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = F8111E2319A951050040E7D1 /* Build configuration list for PBXNativeTarget "iOS Example" */;
|
||||
buildPhases = (
|
||||
F8111E0119A951050040E7D1 /* Sources */,
|
||||
F8111E0219A951050040E7D1 /* Frameworks */,
|
||||
F8111E0319A951050040E7D1 /* Resources */,
|
||||
E6D06B5F19CB413600DE5D11 /* Embed Frameworks */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
E6A0AFB019C9D24000C3A7DC /* PBXTargetDependency */,
|
||||
E6D06B5A19CB412500DE5D11 /* PBXTargetDependency */,
|
||||
E6D06B5E19CB413600DE5D11 /* PBXTargetDependency */,
|
||||
);
|
||||
name = "iOS Example";
|
||||
productName = Armchair;
|
||||
productReference = E6C49DC519C23C91006A4544 /* iOS Example.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
F8111DFD19A951050040E7D1 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastSwiftUpdateCheck = 0700;
|
||||
LastUpgradeCheck = 1100;
|
||||
ORGANIZATIONNAME = Armchair;
|
||||
TargetAttributes = {
|
||||
F8111E0419A951050040E7D1 = {
|
||||
CreatedOnToolsVersion = 6.0;
|
||||
DevelopmentTeam = 9H3S97RP4K;
|
||||
LastSwiftMigration = 1100;
|
||||
};
|
||||
};
|
||||
};
|
||||
buildConfigurationList = F8111E0019A951050040E7D1 /* Build configuration list for PBXProject "iOS Example" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = en;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
Base,
|
||||
);
|
||||
mainGroup = F8111DFC19A951050040E7D1;
|
||||
productRefGroup = F8111DFC19A951050040E7D1;
|
||||
projectDirPath = "";
|
||||
projectReferences = (
|
||||
{
|
||||
ProductGroup = E6C9055519C6432200F41311 /* Products */;
|
||||
ProjectRef = F8111E4E19A95D7C0040E7D1 /* Armchair.xcodeproj */;
|
||||
},
|
||||
);
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
F8111E0419A951050040E7D1 /* iOS Example */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXReferenceProxy section */
|
||||
E6A0AFB319C9D24000C3A7DC /* Armchair.bundle */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = Armchair.bundle;
|
||||
remoteRef = E6A0AFB219C9D24000C3A7DC /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E6D06B5619CB412500DE5D11 /* Armchair.bundle */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.cfbundle;
|
||||
path = Armchair.bundle;
|
||||
remoteRef = E6D06B5519CB412500DE5D11 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E6D8B8BB19C7382B001AD043 /* Armchair.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Armchair.framework;
|
||||
remoteRef = E6D8B8BA19C7382B001AD043 /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
E6E5F4C119C8E156008A6C1B /* Armchair.framework */ = {
|
||||
isa = PBXReferenceProxy;
|
||||
fileType = wrapper.framework;
|
||||
path = Armchair.framework;
|
||||
remoteRef = E6E5F4C019C8E156008A6C1B /* PBXContainerItemProxy */;
|
||||
sourceTree = BUILT_PRODUCTS_DIR;
|
||||
};
|
||||
/* End PBXReferenceProxy section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
F8111E0319A951050040E7D1 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
E6A0AFB419C9D30900C3A7DC /* Armchair.bundle in Resources */,
|
||||
E6E5F4C319C8E18E008A6C1B /* armchair.jpg in Resources */,
|
||||
E60FA81819C9219600179D70 /* logo.png in Resources */,
|
||||
E6E5F4CF19C8E3C6008A6C1B /* Images.xcassets in Resources */,
|
||||
E66F854A19D0A7C600AD80EC /* LaunchScreen.storyboard in Resources */,
|
||||
F8111E1219A951050040E7D1 /* Main.storyboard in Resources */,
|
||||
E6E5F4CD19C8E388008A6C1B /* Icon.png in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
F8111E0119A951050040E7D1 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
F8111E0D19A951050040E7D1 /* ViewController.swift in Sources */,
|
||||
F8111E0B19A951050040E7D1 /* AppDelegate.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
E6A0AFB019C9D24000C3A7DC /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = ArmchairLocalizable;
|
||||
targetProxy = E6A0AFAF19C9D24000C3A7DC /* PBXContainerItemProxy */;
|
||||
};
|
||||
E6D06B5A19CB412500DE5D11 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = Armchair;
|
||||
targetProxy = E6D06B5919CB412500DE5D11 /* PBXContainerItemProxy */;
|
||||
};
|
||||
E6D06B5E19CB413600DE5D11 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
name = Armchair;
|
||||
targetProxy = E6D06B5D19CB413600DE5D11 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin PBXVariantGroup section */
|
||||
E66F854819D0A7C600AD80EC /* LaunchScreen.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
939461E42333725B00C8A00E /* Base */,
|
||||
);
|
||||
name = LaunchScreen.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
F8111E1019A951050040E7D1 /* Main.storyboard */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
939461E32333725B00C8A00E /* Base */,
|
||||
);
|
||||
name = Main.storyboard;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXVariantGroup section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
F8111E2119A951050040E7D1 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
ENABLE_TESTABILITY = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
"DEBUG=1",
|
||||
"$(inherited)",
|
||||
);
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MTL_ENABLE_DEBUG_INFO = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F8111E2219A951050040E7D1 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||
CLANG_CXX_LIBRARY = "libc++";
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CLANG_ENABLE_OBJC_ARC = YES;
|
||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||
CLANG_WARN_COMMA = YES;
|
||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||
CLANG_WARN_EMPTY_BODY = YES;
|
||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||
CLANG_WARN_INT_CONVERSION = YES;
|
||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||
CLANG_WARN_STRICT_PROTOTYPES = YES;
|
||||
CLANG_WARN_SUSPICIOUS_MOVE = YES;
|
||||
CLANG_WARN_UNREACHABLE_CODE = YES;
|
||||
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
ENABLE_NS_ASSERTIONS = NO;
|
||||
ENABLE_STRICT_OBJC_MSGSEND = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_NO_COMMON_BLOCKS = YES;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
|
||||
GCC_WARN_UNDECLARED_SELECTOR = YES;
|
||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
MTL_ENABLE_DEBUG_INFO = NO;
|
||||
SDKROOT = iphoneos;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
|
||||
SWIFT_VERSION = 4.0;
|
||||
TARGETED_DEVICE_FAMILY = "1,2";
|
||||
VALIDATE_PRODUCT = YES;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
F8111E2419A951050040E7D1 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Example/Info-iOS.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
OTHER_SWIFT_FLAGS = "";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "iOS Example";
|
||||
PROVISIONING_PROFILE = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
F8111E2519A951050040E7D1 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
INFOPLIST_FILE = "$(SRCROOT)/Example/Info-iOS.plist";
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "com.armchair.$(PRODUCT_NAME:rfc1034identifier)";
|
||||
PRODUCT_NAME = "iOS Example";
|
||||
PROVISIONING_PROFILE = "";
|
||||
SWIFT_VERSION = 5.0;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
F8111E0019A951050040E7D1 /* Build configuration list for PBXProject "iOS Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F8111E2119A951050040E7D1 /* Debug */,
|
||||
F8111E2219A951050040E7D1 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
F8111E2319A951050040E7D1 /* Build configuration list for PBXNativeTarget "iOS Example" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
F8111E2419A951050040E7D1 /* Debug */,
|
||||
F8111E2519A951050040E7D1 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = F8111DFD19A951050040E7D1 /* Project object */;
|
||||
}
|
||||
7
iOS Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:iOS Example.xcodeproj">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
BIN
itms-9000.png
|
Before Width: | Height: | Size: 67 KiB |
BIN
screencast.png
|
Before Width: | Height: | Size: 374 KiB |