├── .github └── workflows │ ├── checks.yml │ └── release.yml ├── .gitignore ├── Documentation ├── Contribute.md ├── Examples.md ├── Ignoring.md ├── Images │ ├── BuildPhaseExample.png │ ├── CustomImport.png │ ├── DemoRenameImage.gif │ ├── DemoUseImage.gif │ ├── ExplicitCustomModule.png │ ├── ManualBuildPhaseExample.png │ ├── NamespacedSubfolders.png │ ├── RswiftSPMInstallation.mp4 │ ├── RunBuildToolPluginsBlank.png │ ├── RunBuildToolPluginsRswift.png │ └── RunXcodeModifyPackages.png ├── Migration.md ├── QandA.md └── Readme.md ├── Examples ├── FileSystemSynchronized │ ├── FileSystemSynchronized.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── MainUI │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── hand.ignoreme.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── hand.ignoreme.png │ │ ├── Base.lproj │ │ │ └── MyStoryboard.storyboard │ │ ├── ContentView.swift │ │ ├── Folder3 copy │ │ │ ├── Folder3 copy 2 │ │ │ │ ├── hand3 three.png │ │ │ │ └── hand3-two.png │ │ │ ├── hand2 three.png │ │ │ └── hand2-two.png │ │ ├── Info.plist │ │ ├── MainUI.entitlements │ │ ├── MainUIApp.swift │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ ├── User1.png │ │ ├── View.xib │ │ └── nl.lproj │ │ │ └── MyStoryboard.strings │ └── TheAppClip │ │ ├── ClipAssets.xcassets │ │ ├── Contents.json │ │ └── MyColor.colorset │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── Group1 │ │ ├── Base.lproj │ │ │ └── MySiriIntents.intentdefinition │ │ ├── Folder1 │ │ │ └── .gitkeep │ │ ├── Folder2 │ │ │ ├── Folder3 copy 2 │ │ │ │ ├── hand3 three.png │ │ │ │ └── hand3-two.png │ │ │ ├── hand three.png │ │ │ └── hand-two.png │ │ └── nl.lproj │ │ │ └── MySiriIntents.strings │ │ ├── Info.plist │ │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ │ ├── Subdir │ │ ├── Colors@3x.jpg │ │ └── Inner group │ │ │ ├── Nogeeen │ │ │ └── person.png │ │ │ └── User.png │ │ ├── TheAppClip.entitlements │ │ ├── TheAppClipApp.swift │ │ ├── en.lproj │ │ └── Localizable.strings │ │ └── nl.lproj │ │ └── Localizable.strings ├── LocalizedStringApp │ ├── LocalizedStringApp.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── swiftpm │ │ │ │ └── Package.resolved │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── LocalizedStringApp Dutch.xcscheme │ │ │ ├── LocalizedStringApp English (GB).xcscheme │ │ │ ├── LocalizedStringApp English.xcscheme │ │ │ ├── LocalizedStringApp French (Canada).xcscheme │ │ │ ├── LocalizedStringApp French.xcscheme │ │ │ ├── LocalizedStringApp Turkish.xcscheme │ │ │ └── LocalizedStringApp.xcscheme │ ├── LocalizedStringApp │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── eight.strings │ │ │ └── nine.strings │ │ ├── Info.plist │ │ ├── ca.lproj │ │ │ └── four.strings │ │ ├── en-GB.lproj │ │ │ └── five.strings │ │ ├── en.lproj │ │ │ ├── MyStoryboard.storyboard │ │ │ ├── five.strings │ │ │ ├── nine.strings │ │ │ ├── seven.strings │ │ │ ├── three.strings │ │ │ └── two.strings │ │ ├── fr-CA.lproj │ │ │ ├── five.strings │ │ │ └── six.strings │ │ ├── fr.lproj │ │ │ ├── eight.strings │ │ │ ├── five.strings │ │ │ ├── nine.strings │ │ │ ├── seven.strings │ │ │ ├── six.strings │ │ │ └── ten.stringsdict │ │ ├── nl.lproj │ │ │ ├── eight.strings │ │ │ ├── four.strings │ │ │ ├── nine.strings │ │ │ ├── seven.strings │ │ │ ├── ten.stringsdict │ │ │ └── three.strings │ │ └── one.strings │ └── LocalizedStringAppTests │ │ ├── Info.plist │ │ └── LocalizedStringAppTests.swift ├── ResourceApp │ ├── .rswiftignore │ ├── Podfile │ ├── Podfile.lock │ ├── ResourceApp.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── swiftpm │ │ │ │ └── Package.resolved │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── ResourceApp.xcscheme │ ├── ResourceApp.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── swiftpm │ │ │ └── Package.resolved │ ├── ResourceApp │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.xib │ │ │ ├── Main.storyboard │ │ │ └── Secondary.storyboard │ │ ├── CellCollectionView.xib │ │ ├── CellView.xib │ │ ├── CustomSegue.swift │ │ ├── Duplicate.storyboard │ │ ├── Duplicate.xib │ │ ├── Duplicate │ │ │ ├── ADuplicateCellView.xib │ │ │ ├── duplicate.storyboard │ │ │ └── duplicate.xib │ │ ├── DuplicateCellView.xib │ │ ├── ExplicitInclude.ignoreme.png │ │ ├── Files │ │ │ ├── #column │ │ │ ├── Duplicate.json │ │ │ ├── Some.json │ │ │ ├── __FILE__ │ │ │ ├── associatedtype │ │ │ └── duplicateJson │ │ ├── FirstViewController.swift │ │ ├── Fonts │ │ │ ├── AveriaLibre-B.ttf │ │ │ ├── AveriaLibre-BI.ttf │ │ │ ├── AveriaLibre-L.ttf │ │ │ ├── AveriaLibre.ttf │ │ │ └── GdyBkltter1911.ttf │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── AppIcon-1.png │ │ │ │ ├── AppIcon-2.png │ │ │ │ ├── AppIcon-3.png │ │ │ │ ├── AppIcon.png │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── My Red.colorset │ │ │ │ └── Contents.json │ │ │ ├── Namespace │ │ │ │ ├── Contents.json │ │ │ │ ├── Second.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── second.pdf │ │ │ │ └── first.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── first.pdf │ │ │ ├── Second.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── second.pdf │ │ │ ├── Some Folder │ │ │ │ ├── A Nested Folder │ │ │ │ │ ├── first nested.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.pdf │ │ │ │ │ └── second nested.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── second.pdf │ │ │ │ ├── eerste.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── first.pdf │ │ │ │ └── second.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── second.pdf │ │ │ ├── TheAppIcon.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── The App Icon.png │ │ │ └── first.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── first.pdf │ │ ├── Images │ │ │ ├── Colors.jpg │ │ │ ├── Colors@2x.jpg │ │ │ ├── Colors@2x~ipad.jpg │ │ │ ├── Colors@3x.jpg │ │ │ ├── Colors~ipad@2x.jpg │ │ │ ├── Keep.dont.ignoreme.png │ │ │ ├── Sky.tiff │ │ │ ├── The App Icon.png │ │ │ ├── User@white.png │ │ │ ├── User@white@2x.png │ │ │ ├── User@white@3x.png │ │ │ └── icon.ignoreme.png │ │ ├── Images2.xcassets │ │ │ ├── Conflicting.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── first.pdf │ │ │ ├── Contents.json │ │ │ ├── Namespace 1 │ │ │ │ ├── Contents.json │ │ │ │ ├── Inner │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Namespace 2 │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Folder │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.pdf │ │ │ │ ├── Second.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── second.pdf │ │ │ │ └── third.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── first.pdf │ │ │ ├── Namespace- │ │ │ │ ├── Contents.json │ │ │ │ ├── Inner │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── Namespace │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Folder │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.pdf │ │ │ │ ├── Second.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── second.pdf │ │ │ │ └── third.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── first.pdf │ │ │ └── conflicting │ │ │ │ ├── Contents.json │ │ │ │ └── first.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── first.pdf │ │ ├── Info.plist │ │ ├── Localized │ │ │ ├── Base.lproj │ │ │ │ └── hello.txt │ │ │ ├── es.lproj │ │ │ │ └── hello.txt │ │ │ └── nl.lproj │ │ │ │ └── hello.txt │ │ ├── Media.xcassets │ │ │ ├── Contents.json │ │ │ ├── Folder │ │ │ │ ├── Contents.json │ │ │ │ └── Not dupe.colorset │ │ │ │ │ └── Contents.json │ │ │ ├── Keyboard Focus Indicator color.colorset │ │ │ │ └── Contents.json │ │ │ ├── My Red.colorset │ │ │ │ └── Contents.json │ │ │ ├── Not dupe.colorset │ │ │ │ └── Contents.json │ │ │ └── Slightly transparant.colorset │ │ │ │ └── Contents.json │ │ ├── My View.xib │ │ ├── MyViewController.swift │ │ ├── References.storyboard │ │ ├── Relative To Project │ │ │ └── RelativeToProject.xib │ │ ├── SceneDelegate.swift │ │ ├── SecondViewController.swift │ │ ├── SegueIdentifiers.storyboard │ │ ├── Settings.bundle │ │ │ ├── Root.plist │ │ │ └── en.lproj │ │ │ │ └── Root.strings │ │ ├── Specials.storyboard │ │ ├── Strings │ │ │ ├── @@.strings │ │ │ ├── Base.lproj │ │ │ │ ├── Settings.strings │ │ │ │ └── Settings.stringsdict │ │ │ ├── Duplicate#.strings │ │ │ ├── Duplicate.strings │ │ │ ├── Generic.strings │ │ │ ├── Generic.stringsdict │ │ │ ├── en.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── es.lproj │ │ │ │ └── Localizable.strings │ │ │ ├── ja.lproj │ │ │ │ └── Localizable.strings │ │ │ └── nl.lproj │ │ │ │ ├── Settings.strings │ │ │ │ └── Settings.stringsdict │ │ ├── SupplementaryElement.xib │ │ ├── TabBarItem.storyboard │ │ ├── WhitespaceReuseIdentifer.xib │ │ ├── Xib with ViewController.xib │ │ └── hand.ignoreme.png │ └── ResourceAppTests │ │ ├── FilesTests.swift │ │ ├── FontsTests.swift │ │ ├── IgnoreTests.swift │ │ ├── Info.plist │ │ ├── InfoPlistTests.swift │ │ ├── NibTests.swift │ │ ├── ResourceAppTests.swift │ │ ├── SegueTests.swift │ │ ├── StoryboardTests.swift │ │ ├── StringsTests.swift │ │ └── ValidationTests.swift ├── RswiftAppWithStaticFrameworks │ ├── App │ │ ├── Info.plist │ │ ├── Resources │ │ │ ├── Assets.xcassets │ │ │ │ ├── AccentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── AppIcon.appiconset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ └── Base.lproj │ │ │ │ ├── LaunchScreen.storyboard │ │ │ │ └── Main.storyboard │ │ └── Sources │ │ │ ├── AppDelegate.swift │ │ │ ├── SceneDelegate.swift │ │ │ └── ViewController.swift │ ├── AppTests │ │ └── AppTests.swift │ ├── Bar │ │ ├── Info.plist │ │ ├── Resources │ │ │ └── Colors@3x.jpg │ │ └── Sources │ │ │ └── Bar.swift │ ├── Foo │ │ ├── Info.plist │ │ ├── Resources │ │ │ └── User.png │ │ └── Sources │ │ │ └── Foo.swift │ ├── RswiftAppWithStaticFrameworks.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ │ └── swiftpm │ │ │ │ └── Package.resolved │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── App.xcscheme │ │ │ ├── Bar.xcscheme │ │ │ └── Foo.xcscheme │ └── copy_bundles.sh ├── RswiftUI │ ├── RswiftUI.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── swiftpm │ │ │ └── Package.resolved │ ├── RswiftUI │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ └── hand.ignoreme.imageset │ │ │ │ ├── Contents.json │ │ │ │ └── hand.ignoreme.png │ │ ├── ContentView.swift │ │ ├── Info.plist │ │ ├── Preview Content │ │ │ └── Preview Assets.xcassets │ │ │ │ └── Contents.json │ │ └── RswiftUIApp.swift │ └── RswiftUIAppClip │ │ ├── ClipAssets.xcassets │ │ ├── Contents.json │ │ └── MyColor.colorset │ │ │ └── Contents.json │ │ ├── ContentView.swift │ │ ├── Info.plist │ │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ │ ├── RswiftUIAppClip.entitlements │ │ └── RswiftUIAppClipApp.swift ├── RtvApp │ ├── .rswiftignore │ ├── ResourceApp-tvOS │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ │ ├── Brand Assets.brandassets │ │ │ │ ├── App Icon - Large.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon - Small.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Top Shelf Image.imageset │ │ │ │ │ └── Contents.json │ │ │ ├── BrightWhite.colorset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── ImageStackAsset.imagestack │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── allWhiteSmall.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── first.pdf │ │ │ │ │ └── Contents.json │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ ├── Content.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ └── second.pdf │ │ │ │ │ └── Contents.json │ │ │ └── LaunchImage.launchimage │ │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ └── Main.storyboard │ │ └── Info.plist │ ├── ResourceAppTests-tvOS │ │ ├── ImageTests.swift │ │ ├── Info.plist │ │ └── ValidationTests.swift │ └── RtvApp.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── swiftpm │ │ │ └── Package.resolved │ │ └── xcshareddata │ │ └── xcschemes │ │ ├── ResourceApp-tvOS.xcscheme │ │ └── ResourceAppTests-tvOS.xcscheme └── RwatchApp │ ├── .rswiftignore │ ├── ResourceApp-watchOS-Extension │ ├── Assets.xcassets │ │ ├── Complication.complicationset │ │ │ ├── Circular.imageset │ │ │ │ └── Contents.json │ │ │ ├── Contents.json │ │ │ ├── Extra Large.imageset │ │ │ │ └── Contents.json │ │ │ ├── Graphic Bezel.imageset │ │ │ │ └── Contents.json │ │ │ ├── Graphic Circular.imageset │ │ │ │ └── Contents.json │ │ │ ├── Graphic Corner.imageset │ │ │ │ └── Contents.json │ │ │ ├── Graphic Extra Large.imageset │ │ │ │ └── Contents.json │ │ │ ├── Graphic Large Rectangular.imageset │ │ │ │ └── Contents.json │ │ │ ├── Modular.imageset │ │ │ │ └── Contents.json │ │ │ └── Utilitarian.imageset │ │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── MyColor.colorset │ │ │ └── Contents.json │ │ └── hand.ignoreme.imageset │ │ │ ├── Contents.json │ │ │ └── hand.ignoreme.png │ ├── ExtensionDelegate.swift │ ├── Info.plist │ ├── InterfaceController.swift │ ├── NotificationController.swift │ ├── PushNotificationPayload.apns │ └── Strings │ │ ├── en.lproj │ │ └── Localizable.strings │ │ ├── es.lproj │ │ └── Localizable.strings │ │ └── ja.lproj │ │ └── Localizable.strings │ ├── ResourceApp-watchOS │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ └── Interface.storyboard │ └── Info.plist │ └── RwatchApp.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ └── Package.resolved │ └── xcshareddata │ └── xcschemes │ ├── ResourceApp-watchOS (Notification).xcscheme │ └── ResourceApp-watchOS.xcscheme ├── License ├── Package.resolved ├── Package.swift ├── Plugins ├── RswiftGenerateInternalResources │ └── RswiftGenerateInternalResources.swift ├── RswiftGeneratePublicResources │ └── RswiftGeneratePublicResources.swift ├── RswiftGenerateResourcesCommand │ └── RswiftGenerateResourcesCommand.swift └── RswiftModifyXcodePackages │ └── RswiftModifyXcodePackages.swift ├── R.swift.podspec ├── README.md ├── Sources ├── RswiftGenerators │ ├── AccessibilityIdentifier+Generator.swift │ ├── AssetCatalog+Generator.swift │ ├── Extensions │ │ ├── Array+Extensions.swift │ │ └── String+Extensions.swift │ ├── FileResource+Generator.swift │ ├── FontResource+Generator.swift │ ├── Nib+Generator.swift │ ├── PropertyListResource+Generator.swift │ ├── ReuseIdentifier+Generator.swift │ ├── Segue+Generator.swift │ ├── Shared │ │ ├── AssetCatalogMergedNamespaces.swift │ │ ├── LocaleReference+Generator.swift │ │ ├── SwiftIdentifier.swift │ │ └── TypeReference+Generator.swift │ ├── Storyboard+Generator.swift │ ├── StringsTable+Generator.swift │ ├── SwiftSyntax │ │ ├── Struct.swift │ │ └── StructMembersBuilder.swift │ └── XcodeProject+Generator.swift ├── RswiftParsers │ ├── ProjectResources.swift │ ├── Resources │ │ ├── AssetCatalog+Parser.swift │ │ ├── FileResource+Parser.swift │ │ ├── FontResource+Parser.swift │ │ ├── ImageResource+Parser.swift │ │ ├── Nib+Parser.swift │ │ ├── PropertyList+Parser.swift │ │ ├── Storyboard+Parser.swift │ │ └── StringsTable+Parser.swift │ └── Shared │ │ ├── Bundle+Extensions.swift │ │ ├── DeploymentTarget+Parser.swift │ │ ├── FormatPart+Extensions.swift │ │ ├── GeneratedId.swift │ │ ├── Glob.swift │ │ ├── IgnoreFile.swift │ │ ├── ResourceParsingError.swift │ │ ├── SourceTreeURLs.swift │ │ ├── SupportedExtensions.swift │ │ ├── TypeReference+Extensions.swift │ │ ├── URL+Extensions.swift │ │ └── Xcodeproj.swift ├── RswiftResources │ ├── AssetCatalog.swift │ ├── ColorResource.swift │ ├── DataResource.swift │ ├── FileResource.swift │ ├── FontResource.swift │ ├── ImageResource.swift │ ├── Integrations │ │ ├── Bundle+Extensions.swift │ │ ├── ColorResource+Integrations.swift │ │ ├── DataResource+Integrations.swift │ │ ├── FileResource+Integrations.swift │ │ ├── FontResource+Integrations.swift │ │ ├── ImageResource+Integrations.swift │ │ ├── NibReference+Integrations.swift │ │ ├── ReuseIdentifier+Integrations.swift │ │ ├── SegueIdentifier+Integrations.swift │ │ ├── StoryboardReference+Integrations.swift │ │ └── StringResource+Integrations.swift │ ├── NibResource.swift │ ├── PropertyListResource.swift │ ├── Shared │ │ ├── DeploymentTarget.swift │ │ ├── LocaleReference.swift │ │ ├── ModuleReference.swift │ │ ├── NameCatalog.swift │ │ ├── Reusable.swift │ │ ├── StoryboardReference.swift │ │ ├── StringParam+Extensions.swift │ │ ├── StringParam.swift │ │ ├── StringsTable.swift │ │ ├── TypeReference.swift │ │ ├── Unifiable.swift │ │ └── ValidationError.swift │ ├── StoryboardResource.swift │ └── StringResource.swift └── rswift │ ├── App.swift │ ├── Config.swift │ └── RswiftCore.swift └── Tests ├── RswiftGeneratorsTests └── MainTests.swift └── RswiftParsersTests ├── GlobTests.swift └── NibParserDelegateTests.swift /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | xcuserdata 3 | DerivedData 4 | Pods 5 | *.xccheckout 6 | *.generated.swift 7 | 8 | fastlane/test_output 9 | fastlane/README.md 10 | fastlane/report.xml 11 | fastlane/settoken.sh 12 | 13 | build 14 | .build 15 | .swiftpm 16 | rswift.xcarchive 17 | rswift.xcodeproj 18 | 19 | rswift.log 20 | rswift-tv.log 21 | rswift-watchos.log 22 | -------------------------------------------------------------------------------- /Documentation/Images/BuildPhaseExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/BuildPhaseExample.png -------------------------------------------------------------------------------- /Documentation/Images/CustomImport.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/CustomImport.png -------------------------------------------------------------------------------- /Documentation/Images/DemoRenameImage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/DemoRenameImage.gif -------------------------------------------------------------------------------- /Documentation/Images/DemoUseImage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/DemoUseImage.gif -------------------------------------------------------------------------------- /Documentation/Images/ExplicitCustomModule.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/ExplicitCustomModule.png -------------------------------------------------------------------------------- /Documentation/Images/ManualBuildPhaseExample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/ManualBuildPhaseExample.png -------------------------------------------------------------------------------- /Documentation/Images/NamespacedSubfolders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/NamespacedSubfolders.png -------------------------------------------------------------------------------- /Documentation/Images/RswiftSPMInstallation.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/RswiftSPMInstallation.mp4 -------------------------------------------------------------------------------- /Documentation/Images/RunBuildToolPluginsBlank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/RunBuildToolPluginsBlank.png -------------------------------------------------------------------------------- /Documentation/Images/RunBuildToolPluginsRswift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/RunBuildToolPluginsRswift.png -------------------------------------------------------------------------------- /Documentation/Images/RunXcodeModifyPackages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Documentation/Images/RunXcodeModifyPackages.png -------------------------------------------------------------------------------- /Documentation/Readme.md: -------------------------------------------------------------------------------- 1 | # Documentation for R.swift 2 | 3 | - [Questions and Answers](QandA.md) 4 | - [Usage examples](Examples.md) 5 | - [Ignoring resources](Ignoring.md) 6 | - [Pointers for migration between major versions](Migration.md) 7 | - [About contributing](Contribute.md) 8 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/FileSystemSynchronized.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/FileSystemSynchronized.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Assets.xcassets/hand.ignoreme.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "hand.ignoreme.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // MainUI 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | Text("Hello, SwiftUI App!") 13 | .padding() 14 | 15 | Image(R.image.handIgnoreme) 16 | .resizable() 17 | .aspectRatio(1, contentMode: .fit) 18 | .frame(width: 140) 19 | } 20 | } 21 | 22 | struct ContentView_Previews: PreviewProvider { 23 | static var previews: some View { 24 | ContentView() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Folder3 copy/Folder3 copy 2/hand3 three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/Folder3 copy/Folder3 copy 2/hand3 three.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Folder3 copy/Folder3 copy 2/hand3-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/Folder3 copy/Folder3 copy 2/hand3-two.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Folder3 copy/hand2 three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/Folder3 copy/hand2 three.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Folder3 copy/hand2-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/Folder3 copy/hand2-two.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | NSUserActivityTypes 24 | 25 | FirstIntentIntent 26 | 27 | UIApplicationSceneManifest 28 | 29 | UIApplicationSupportsMultipleScenes 30 | 31 | 32 | UIApplicationSupportsIndirectInputEvents 33 | 34 | UILaunchScreen 35 | 36 | UIRequiredDeviceCapabilities 37 | 38 | armv7 39 | 40 | UISupportedInterfaceOrientations 41 | 42 | UIInterfaceOrientationPortrait 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | UISupportedInterfaceOrientations~ipad 47 | 48 | UIInterfaceOrientationPortrait 49 | UIInterfaceOrientationPortraitUpsideDown 50 | UIInterfaceOrientationLandscapeLeft 51 | UIInterfaceOrientationLandscapeRight 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/MainUI.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.application-groups 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/MainUIApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainUIApp.swift 3 | // MainUI 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct MainUIApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | .onAppear { 16 | // From Assets (in this target) 17 | print(R.image.handIgnoreme()!) 18 | 19 | // From root folder (in this target) 20 | print(R.image.user1()!) 21 | print(R.storyboard.myStoryboard.instantiateInitialViewController()!) 22 | 23 | // From Folders3 copy (in this target) 24 | print(R.image.hand3Two()!) 25 | print(R.image.hand3Three()!) 26 | print(R.image.hand2Two()!) 27 | print(R.image.hand2Three()!) 28 | 29 | // From Subdir (in TheAppClip target) 30 | print(R.image.person()!) 31 | 32 | // From root folder (in TheAppClip target) 33 | print(R.string.localizable.helloWorld()) 34 | } 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/User1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/MainUI/User1.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/View.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/MainUI/nl.lproj/MyStoryboard.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "UILabel"; text = "Second label"; ObjectID = "cgd-Ta-I3o"; */ 3 | "cgd-Ta-I3o.text" = "Tweede label"; 4 | 5 | /* Class = "UILabel"; text = "The first"; ObjectID = "oox-ej-MK4"; */ 6 | "oox-ej-MK4.text" = "De eerste"; 7 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/ClipAssets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/ClipAssets.xcassets/MyColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "platform" : "ios", 6 | "reference" : "systemTealColor" 7 | }, 8 | "idiom" : "universal" 9 | }, 10 | { 11 | "appearances" : [ 12 | { 13 | "appearance" : "luminosity", 14 | "value" : "dark" 15 | } 16 | ], 17 | "color" : { 18 | "platform" : "ios", 19 | "reference" : "systemOrangeColor" 20 | }, 21 | "idiom" : "universal" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // TheAppClip 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | Text("Hello, App Clip!") 13 | .padding() 14 | 15 | Image(R.image.handIgnoreme) 16 | .resizable() 17 | .aspectRatio(1, contentMode: .fit) 18 | .frame(width: 140) 19 | .border(Color(R.color.myColor)) 20 | } 21 | } 22 | 23 | struct ContentView_Previews: PreviewProvider { 24 | static var previews: some View { 25 | ContentView() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/Folder1/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Group1/Folder1/.gitkeep -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/Folder3 copy 2/hand3 three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/Folder3 copy 2/hand3 three.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/Folder3 copy 2/hand3-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/Folder3 copy 2/hand3-two.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/hand three.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/hand three.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/hand-two.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Group1/Folder2/hand-two.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Group1/nl.lproj/MySiriIntents.strings: -------------------------------------------------------------------------------- 1 | "0yVZNa" = "de omschrijving"; 2 | 3 | "YPNLgh" = "Eerste Intent"; 4 | 5 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Subdir/Colors@3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Subdir/Colors@3x.jpg -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Subdir/Inner group/Nogeeen/person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Subdir/Inner group/Nogeeen/person.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/Subdir/Inner group/User.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/FileSystemSynchronized/TheAppClip/Subdir/Inner group/User.png -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/TheAppClip.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.parent-application-identifiers 6 | 7 | $(AppIdentifierPrefix)nl.mathijskadijk.MainUI 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/TheAppClipApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TheAppClipApp.swift 3 | // TheAppClip 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct TheAppClipApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | .onAppear { 16 | // From ClipAssets (in this target) 17 | print(R.color.myColor()!) 18 | 19 | // From Group1 (in this target) 20 | print(R.image.handTwo()!) 21 | print(R.image.handThree()!) 22 | print(R.image.hand3Two()!) 23 | print(R.image.hand3Three()!) 24 | print(R.image.hand3Three()!) 25 | 26 | // From Subdir (in this target) 27 | print(R.image.colorsJpg()!) 28 | print(R.image.user()!) 29 | 30 | // From root folder (in this target) 31 | print(R.string.localizable.helloWorld()) 32 | 33 | // From Assets (in MainUI) 34 | print(R.image.handIgnoreme()!) 35 | 36 | // From root folder (in MainUI) 37 | print(R.storyboard.myStoryboard.instantiateInitialViewController()!) 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | FileSystemSynchronized 4 | 5 | Created by Tom Lokhorst on 2024-11-03. 6 | 7 | */ 8 | 9 | "hello.world" = "Hello world"; 10 | -------------------------------------------------------------------------------- /Examples/FileSystemSynchronized/TheAppClip/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | FileSystemSynchronized 4 | 5 | Created by Tom Lokhorst on 2024-11-03. 6 | 7 | */ 8 | 9 | "hello.world" = "Hallo wereld"; 10 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "cd466d6e8c5ffd2f2b61165d37b0646f09068e1e", 18 | "version" : "2.9.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/Base.lproj/eight.strings: -------------------------------------------------------------------------------- 1 | /* 2 | eight.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-26. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "eight1" = "eight 1, localized base"; 10 | "eight2" = "eight 2, localized base"; 11 | "eight3" = "eight 3, localized base"; 12 | 13 | "eightArg1" = "eight 1 %@, localized base"; 14 | "eightArg2" = "eight 2 %@, localized base"; 15 | "eightArg3" = "eight 3 %@, localized base"; 16 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/Base.lproj/nine.strings: -------------------------------------------------------------------------------- 1 | /* 2 | nine.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-31. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "nine1" = "nine 1, localized base"; 10 | "nine2" = "nine 2, localized base"; 11 | "nine3" = "nine 3, localized base"; 12 | 13 | "nineArg1" = "nine 1 %@, localized base"; 14 | "nineArg2" = "nine 2 %@, localized base"; 15 | "nineArg3" = "nine 3 %@, localized base"; 16 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSApplicationCategoryType 22 | 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/ca.lproj/four.strings: -------------------------------------------------------------------------------- 1 | /* 2 | four.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "four1" = "four 1, localized catalan"; 10 | "fourArg" = "four %@, localized catalan"; 11 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en-GB.lproj/five.strings: -------------------------------------------------------------------------------- 1 | /* 2 | five.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "five1" = "five 1, localized english gb"; 10 | 11 | 12 | 13 | "fiveArg1" = "five 1 %@, localized english gb"; 14 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/MyStoryboard.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/five.strings: -------------------------------------------------------------------------------- 1 | /* 2 | five.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "five1" = "five 1, localized english"; 10 | "five2" = "five 2, localized english"; 11 | "five3" = "five 3, localized english"; 12 | 13 | "fiveArg1" = "five 1 %@, localized english"; 14 | "fiveArg2" = "five 2 %@, localized english"; 15 | "fiveArg3" = "five 3 %@, localized english"; 16 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/nine.strings: -------------------------------------------------------------------------------- 1 | /* 2 | nine.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-31. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "nine1" = "nine 1, localized english"; 10 | "nine2" = "nine 2, localized english"; 11 | 12 | 13 | "nineArg1" = "nine 1 %@, localized english"; 14 | "nineArg2" = "nine 2 %@, localized english"; 15 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/seven.strings: -------------------------------------------------------------------------------- 1 | /* 2 | seven.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-22. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "seven1" = "seven 1, localized english"; 10 | "seven2" = "seven 2, localized english"; 11 | 12 | 13 | "sevenArg1" = "seven 1 %@, localized english"; 14 | "sevenArg2" = "seven 2 %@, localized english"; 15 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/three.strings: -------------------------------------------------------------------------------- 1 | /* 2 | three.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "three1" = "three 1, localized english"; 10 | "three2" = "three 2, localized english"; 11 | 12 | "threeArg1" = "three 1 %@, localized english"; 13 | "threeArg2" = "three 2 %@, localized english"; 14 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/en.lproj/two.strings: -------------------------------------------------------------------------------- 1 | /* 2 | two.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "two1" = "two 1, localized english"; 10 | "two2" = "two 2, %@ localized english"; 11 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr-CA.lproj/five.strings: -------------------------------------------------------------------------------- 1 | /* 2 | five.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "five1" = "five 1, localized french canada"; 10 | 11 | 12 | 13 | "fiveArg1" = "five 1 %@, localized french canada"; 14 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr-CA.lproj/six.strings: -------------------------------------------------------------------------------- 1 | /* 2 | six.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "six1" = "six 1, localized french canada"; 10 | 11 | "sixArg1" = "six 1 %@, localized french canada"; 12 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/eight.strings: -------------------------------------------------------------------------------- 1 | /* 2 | eight.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-26. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "eight1" = "eight 1, localized french"; 10 | "eight2" = "eight 2, localized french"; 11 | 12 | 13 | "eightArg1" = "eight 1 %@, localized french"; 14 | "eightArg2" = "eight 2 %@, localized french"; 15 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/five.strings: -------------------------------------------------------------------------------- 1 | /* 2 | five.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "five1" = "five 1, localized french"; 10 | "five2" = "five 2, localized french"; 11 | 12 | "five4" = "five 4, localized french"; 13 | "fiveArg1" = "five 1 %@, localized french"; 14 | "fiveArg2" = "five 2 %@, localized french"; 15 | 16 | "fiveArg4" = "five 4 %@, localized french"; 17 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/nine.strings: -------------------------------------------------------------------------------- 1 | /* 2 | nine.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-31. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "nine1" = "nine 1, localized french"; 10 | "nine2" = "nine 2, localized french"; 11 | 12 | 13 | "nineArg1" = "nine 1 %@, localized french"; 14 | "nineArg2" = "nine 2 %@, localized french"; 15 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/seven.strings: -------------------------------------------------------------------------------- 1 | /* 2 | seven.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-22. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "seven1" = "seven 1, localized french"; 10 | "seven2" = "seven 2, localized french"; 11 | "seven3" = "seven 3, localized french"; 12 | "seven4" = "seven 4, localized french"; 13 | "sevenArg1" = "seven 1 %@, localized french"; 14 | "sevenArg2" = "seven 2 %@, localized french"; 15 | "sevenArg3" = "seven 3 %@, localized french"; 16 | "sevenArg4" = "seven 4 %@, localized french"; 17 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/six.strings: -------------------------------------------------------------------------------- 1 | /* 2 | six.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "six1" = "six 1, localized french"; 10 | "six2" = "six 2, localized french"; 11 | "sixArg1" = "six 1 %@, localized french"; 12 | "sixArg2" = "six 2 %@, localized french"; 13 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/fr.lproj/ten.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ten1 6 | 7 | NSStringLocalizedFormatKey 8 | ten 1 - %#@things@, localized french 9 | things 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d thing 17 | other 18 | %d things 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/eight.strings: -------------------------------------------------------------------------------- 1 | /* 2 | eight.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-26. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "eight1" = "eight 1, localized dutch"; 10 | 11 | 12 | "eight4" = "eight 4, localized dutch"; 13 | "eightArg1" = "eight 1 %@, localized dutch"; 14 | 15 | 16 | "eightArg4" = "eight 4 %@, localized dutch"; 17 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/four.strings: -------------------------------------------------------------------------------- 1 | /* 2 | four.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "four1" = "four 1, localized dutch"; 10 | "fourArg" = "four %@, localized dutch"; 11 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/nine.strings: -------------------------------------------------------------------------------- 1 | /* 2 | nine.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-31. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "nine1" = "nine 1, localized dutch"; 10 | 11 | 12 | "nine4" = "nine 4, localized dutch"; 13 | "nineArg1" = "nine 1 %@, localized dutch"; 14 | 15 | 16 | "nineArg4" = "nine 4 %@, localized dutch"; 17 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/seven.strings: -------------------------------------------------------------------------------- 1 | /* 2 | seven.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-22. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "seven1" = "seven 1, localized dutch"; 10 | 11 | 12 | "seven4" = "seven 4, localized dutch"; 13 | "sevenArg1" = "seven 1 %@, localized dutch"; 14 | 15 | 16 | "sevenArg4" = "seven 4 %@, localized dutch"; 17 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/ten.stringsdict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ten1 6 | 7 | NSStringLocalizedFormatKey 8 | ten 1 - %#@things@, localized dutch 9 | things 10 | 11 | NSStringFormatSpecTypeKey 12 | NSStringPluralRuleType 13 | NSStringFormatValueTypeKey 14 | d 15 | one 16 | %d thing 17 | other 18 | %d things 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/nl.lproj/three.strings: -------------------------------------------------------------------------------- 1 | /* 2 | three.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "three1" = "three 1, localized dutch"; 10 | 11 | "three3" = "three 3, localized dutch"; 12 | "threeArg1" = "three 1 %@, localized dutch"; 13 | 14 | "threeArg3" = "three 3 %@, localized dutch"; 15 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringApp/one.strings: -------------------------------------------------------------------------------- 1 | /* 2 | one.strings 3 | LocalizedStringApp 4 | 5 | Created by Tom Lokhorst on 2019-08-21. 6 | Copyright © 2019 R.swift. All rights reserved. 7 | */ 8 | 9 | "one1" = "one 1, not localized"; 10 | "one2" = "one 2, not localized"; 11 | "oneArg" = "one %@, not localized"; 12 | -------------------------------------------------------------------------------- /Examples/LocalizedStringApp/LocalizedStringAppTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/ResourceApp/.rswiftignore: -------------------------------------------------------------------------------- 1 | # Filtering single file 2 | ResourceApp/Images/Sky.tiff 3 | 4 | # Corrupt line 5 | 6 | # Ignore all files containing '.ignoreme.' 7 | **/*.ignoreme.* 8 | 9 | # Explicitly include single file 10 | !ResourceApp/ExplicitInclude.ignoreme.png 11 | 12 | # Explicitly include all files containing '.dont.ignoreme.' 13 | !**/*.dont.ignoreme.* 14 | -------------------------------------------------------------------------------- /Examples/ResourceApp/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | workspace 'ResourceApp' 3 | 4 | target 'ResourceApp' do 5 | platform :ios, '12.0' 6 | project 'ResourceApp' 7 | 8 | pod 'SWRevealViewController' 9 | end 10 | 11 | post_install do |installer| 12 | installer.pods_project.targets.each do |target| 13 | target.build_configurations.each do |config| 14 | config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' 15 | end 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /Examples/ResourceApp/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SWRevealViewController (2.3.0) 3 | 4 | DEPENDENCIES: 5 | - SWRevealViewController 6 | 7 | SPEC REPOS: 8 | trunk: 9 | - SWRevealViewController 10 | 11 | SPEC CHECKSUMS: 12 | SWRevealViewController: 6d3fd97f70112fd7cef9de14df4260eacce4c63a 13 | 14 | PODFILE CHECKSUM: e2c390a1550dbee3d41134bbc3a65772c599b62c 15 | 16 | COCOAPODS: 1.16.2 17 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "cd466d6e8c5ffd2f2b61165d37b0646f09068e1e", 18 | "version" : "2.9.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "1e761a55dd8d73b4e9cc227a297f438413953571", 18 | "version" : "2.11.1" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/CellCollectionView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/CellView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/CustomSegue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomSegue.swift 3 | // ResourceApp 4 | // 5 | // Created by Tom Lokhorst on 2019-06-10. 6 | // Copyright © 2019 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class CustomSegue: UIStoryboardSegue { 12 | } 13 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Duplicate.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Duplicate.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Duplicate/ADuplicateCellView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Duplicate/duplicate.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Duplicate/duplicate.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/DuplicateCellView.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/ExplicitInclude.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/ExplicitInclude.ignoreme.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/#column: -------------------------------------------------------------------------------- 1 | #column is a Swift keyword as of Swift 2.2 -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/Duplicate.json: -------------------------------------------------------------------------------- 1 | { "some": "json" } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/Some.json: -------------------------------------------------------------------------------- 1 | { "some": "json" } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/__FILE__: -------------------------------------------------------------------------------- 1 | __FILE__ is a reserved keyword in Swift -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/associatedtype: -------------------------------------------------------------------------------- 1 | associatedtype is a Swift keyword as of Swift 2.2 -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Files/duplicateJson: -------------------------------------------------------------------------------- 1 | { "some": "json" } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/FirstViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FirstViewController.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 20-07-15. 6 | // Copyright (c) 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class FirstViewController: UIViewController { 12 | 13 | @IBOutlet weak var titleLabel: UILabel! 14 | 15 | override func viewDidLoad() { 16 | super.viewDidLoad() 17 | // Do any additional setup after loading the view, typically from a nib. 18 | titleLabel.font = R.font.averiaLibreBoldItalic(size: 36) 19 | tabBarItem.image = R.image.userWhite() 20 | } 21 | 22 | override func didReceiveMemoryWarning() { 23 | super.didReceiveMemoryWarning() 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | 28 | } 29 | 30 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-B.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-B.ttf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-BI.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-BI.ttf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-L.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre-L.ttf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Fonts/AveriaLibre.ttf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Fonts/GdyBkltter1911.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Fonts/GdyBkltter1911.ttf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-1.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-2.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon-3.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/AppIcon.appiconset/AppIcon.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/My Red.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "display-p3", 11 | "components" : { 12 | "red" : 0.8784313725, 13 | "alpha" : 1, 14 | "blue" : 0, 15 | "green" : 0.4392156863 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/Second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/Second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/Second.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Namespace/first.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Second.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/first nested.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/first nested.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/first nested.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/second nested.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/second nested.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/A Nested Folder/second nested.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/eerste.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/eerste.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/eerste.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/Some Folder/second.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/TheAppIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "The App Icon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/TheAppIcon.imageset/The App Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/TheAppIcon.imageset/The App Icon.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images.xcassets/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images.xcassets/first.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Colors.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Colors.jpg -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Colors@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Colors@2x.jpg -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Colors@2x~ipad.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Colors@2x~ipad.jpg -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Colors@3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Colors@3x.jpg -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Colors~ipad@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Colors~ipad@2x.jpg -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Keep.dont.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Keep.dont.ignoreme.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/Sky.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/Sky.tiff -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/The App Icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/The App Icon.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/User@white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/User@white.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/User@white@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/User@white@2x.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/User@white@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/User@white@3x.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images/icon.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images/icon.ignoreme.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Conflicting.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Conflicting.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Conflicting.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Namespace 2/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Namespace 2/Folder/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Namespace 2/Folder/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Namespace 2/Folder/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Inner/Namespace 2/Folder/first.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/Second.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/third.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/third.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace 1/third.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Namespace/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Namespace/Folder/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Namespace/Folder/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Namespace/Folder/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Inner/Namespace/Folder/first.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Second.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "second.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Second.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/Second.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/third.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/third.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/Namespace-/third.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/conflicting/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/conflicting/first.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "first.pdf" 6 | } 7 | ], 8 | "info" : { 9 | "version" : 1, 10 | "author" : "xcode" 11 | } 12 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Images2.xcassets/conflicting/first.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Images2.xcassets/conflicting/first.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Localized/Base.lproj/hello.txt: -------------------------------------------------------------------------------- 1 | Hello, World! 2 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Localized/es.lproj/hello.txt: -------------------------------------------------------------------------------- 1 | ¡Hola Mundo! 2 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Localized/nl.lproj/hello.txt: -------------------------------------------------------------------------------- 1 | Hallo, Wereld! 2 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Folder/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Folder/Not dupe.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : 0.7860491071, 13 | "alpha" : 1, 14 | "blue" : 1, 15 | "green" : 1 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Keyboard Focus Indicator color.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : 0.2313725490196079, 13 | "alpha" : 1, 14 | "blue" : 0.9882352941176471, 15 | "green" : 0.6 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/My Red.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "display-p3", 11 | "components" : { 12 | "red" : 0.7215686274999999, 13 | "alpha" : 1, 14 | "blue" : 0.1019607843, 15 | "green" : 0.02745098039 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Not dupe.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "display-p3", 11 | "components" : { 12 | "red" : 1, 13 | "alpha" : 1, 14 | "blue" : 1, 15 | "green" : 0.7767578125 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Media.xcassets/Slightly transparant.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "extended-gray", 11 | "components" : { 12 | "white" : 0, 13 | "alpha" : 0.4 14 | } 15 | } 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/MyViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MyViewController.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 08-08-15. 6 | // Copyright © 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MyViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/SecondViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SecondViewController.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 20-07-15. 6 | // Copyright (c) 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class SecondViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do any additional setup after loading the view, typically from a nib. 16 | 17 | let _ = MyViewController(nib: R.nib.myView) 18 | } 19 | 20 | override func didReceiveMemoryWarning() { 21 | super.didReceiveMemoryWarning() 22 | // Dispose of any resources that can be recreated. 23 | } 24 | 25 | @IBAction func unwindSomethingSomthing(_ segue: UIStoryboardSegue) { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Settings.bundle/Root.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | StringsTable 6 | Root 7 | PreferenceSpecifiers 8 | 9 | 10 | Type 11 | PSGroupSpecifier 12 | Title 13 | Group 14 | 15 | 16 | Type 17 | PSTextFieldSpecifier 18 | Title 19 | Name 20 | Key 21 | name_preference 22 | DefaultValue 23 | 24 | IsSecure 25 | 26 | KeyboardType 27 | Alphabet 28 | AutocapitalizationType 29 | None 30 | AutocorrectionType 31 | No 32 | 33 | 34 | Type 35 | PSToggleSwitchSpecifier 36 | Title 37 | Enabled 38 | Key 39 | enabled_preference 40 | DefaultValue 41 | 42 | 43 | 44 | Type 45 | PSSliderSpecifier 46 | Key 47 | slider_preference 48 | DefaultValue 49 | 0.5 50 | MinimumValue 51 | 0 52 | MaximumValue 53 | 1 54 | MinimumValueImage 55 | 56 | MaximumValueImage 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Settings.bundle/en.lproj/Root.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/Settings.bundle/en.lproj/Root.strings -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/@@.strings: -------------------------------------------------------------------------------- 1 | /* 2 | @@.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "at" = "@"; 10 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/Base.lproj/Settings.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Settings.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "Title" = "Settings"; 10 | 11 | "Not translated" = "Base language; Not translated"; 12 | 13 | "Multiline \\key/ 14 | \"weird\"?!" = "ABC 15 | \"\\DEF/\" 16 | GHI Base"; 17 | "Copy.Progress" = "%1$d of %2$i files copied, %3$f.2%% completed."; 18 | "We need a couple things\r\nbefore you get started." = "We need a couple things\r\nbefore you get started."; 19 | 20 | "FormatSpecifiers1" = "number 1: %d, number 2: %i, string 3: %@"; 21 | "FormatSpecifiers2" = "string 3: %3$@, number 2: %2$d, number 1: %1$i"; 22 | "FormatSpecifiers3" = "Nothing"; 23 | "FormatSpecifiers4" = "number 1: %1$d"; 24 | "FormatSpecifiers5" = "number 1: %d, string 3: %@"; 25 | "FormatSpecifiers6" = "number 1: %1$i, string 3: %3$@"; 26 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/Duplicate#.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Duplicate_.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "duplicate2" = "Duplicate 2"; 10 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/Duplicate.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Duplicate.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "duplicate1" = "Duplicate 1"; 10 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/Generic.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Generic.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "loremipsum" = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; 10 | "#" = "hashtag"; 11 | "precision1" = "one - %012.2f"; 12 | "precision2" = "two - %12.2f"; 13 | "precision3" = "three - %12.4f"; 14 | "precision4" = "four - %.2f"; 15 | "discount10" = "Today, 10%% off!"; 16 | "discountX" = "Today, %d%% off!"; 17 | "url" = "http%%3A%%2F%%2Fwww.abc.xyz"; 18 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Localizable.strings 3 | // ResourceApp 4 | // 5 | // Created by Nolan Warner on 2016/03/01. 6 | // Copyright © 2016 Nolan Warner. All rights reserved. 7 | // 8 | 9 | one = Zero; // Duplicate keys are ignored, a warning from R.swift would be nice 10 | one = One; 11 | two = 2; 12 | 13 | "quote" = "There are %d lights!"; 14 | "discount10" = "Today, 10%% off!"; 15 | "discountX" = "Today, %d%% off!"; 16 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Localizable.strings 3 | // ResourceApp 4 | // 5 | // Created by Nolan Warner on 2016/03/01. 6 | // Copyright © 2016 Nolan Warner. All rights reserved. 7 | // 8 | 9 | 10 | one = Uno; 11 | two = 2; 12 | 13 | "quote" = "Hay %d luces!"; 14 | "discount10" = "Today, 10%% off!"; 15 | "discountX" = "Today, %d%% off!"; 16 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | // 2 | // Localizable.strings 3 | // ResourceApp 4 | // 5 | // Created by Nolan Warner on 2016/03/01. 6 | // Copyright © 2016 Nolan Warner. All rights reserved. 7 | // 8 | 9 | 10 | one = "一つ"; 11 | two = 2; 12 | 13 | "quote" = "%dつの光があります!"; 14 | "discount10" = "Today, 10%% off!"; 15 | "discountX" = "Today, %d%% off!"; 16 | "japanese only" = "Not translated in other languages, and there is no Base"; 17 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/Strings/nl.lproj/Settings.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Settings.strings 3 | ResourceApp 4 | 5 | Created by Tom Lokhorst on 2016-04-17. 6 | Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | "Title" = "Instellingen"; 10 | 11 | "Only Dutch" = "Alleen Nederlands. Doesn't apepar in Base translation"; 12 | 13 | "Multiline \\key/ 14 | \"weird\"?!" = "ABC 15 | \"\\DEF/\" 16 | GHI Dutch"; 17 | "Copy.Progress" = "Van de %2$d bestanden zijn er %1$d gekopieerd, %3$.2f%% compleet."; 18 | "We need a couple things\r\nbefore you get started." = "We hebben een aantal dingen nodig\r\nvoordat je begint."; 19 | 20 | "FormatSpecifiers1" = "number 1: %d, number 2: %i"; 21 | "FormatSpecifiers2" = "string 3: %3$@, number 1: %1$i"; 22 | "FormatSpecifiers3" = "number 2: %2$d, string 3: %3$@, number 1: %1$i"; 23 | "FormatSpecifiers4" = "number 1: %d, number 2: %i, string 3: %@"; 24 | "FormatSpecifiers5" = "number 1: %d, number 2: %i, string 3: %@"; 25 | "FormatSpecifiers6" = "number 1: %1$i, string 3: %3$@"; 26 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/SupplementaryElement.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/WhitespaceReuseIdentifer.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceApp/hand.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/ResourceApp/ResourceApp/hand.ignoreme.png -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/FilesTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FilesTests.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 25-09-15. 6 | // Copyright © 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | @testable import ResourceApp 12 | 13 | class FilesTests: XCTestCase { 14 | 15 | func testNoNilResourceFiles() { 16 | XCTAssertNotNil(R.file.someJson()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/FontsTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FontsTests.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 26-08-15. 6 | // Copyright © 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | import RswiftResources 12 | @testable import ResourceApp 13 | 14 | class FontsTests: XCTestCase { 15 | 16 | func testNoNilFonts() { 17 | XCTAssertNotNil(R.font.averiaLibreBold(size: 10)) 18 | XCTAssertNotNil(R.font.averiaLibreBoldItalic(size: 20)) 19 | XCTAssertNotNil(R.font.averiaLibreLight(size: 30)) 20 | XCTAssertNotNil(R.font.averiaLibreRegular(size: 40)) 21 | XCTAssertNotNil(R.font.goudyBookletter1911(size: 50)) 22 | } 23 | 24 | func testNoValidationError() { 25 | XCTAssertNoThrow(try R.font.validate()) 26 | } 27 | 28 | func testAllFonts() { 29 | XCTAssertEqual(Array(R.font.map(\.name)), ["AveriaLibre-Bold", "AveriaLibre-BoldItalic", "AveriaLibre-Light", "AveriaLibre-Regular", "GoudyBookletter1911"]) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/IgnoreTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // IgnoreTests.swift 3 | // ResourceAppTests 4 | // 5 | // Created by Mathijs Kadijk on 15-06-18. 6 | // Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import XCTest 11 | import RswiftResources 12 | @testable import ResourceApp 13 | 14 | class IgnoreTests: XCTestCase { 15 | func testExplicitInclude() { 16 | XCTAssertNotNil(R.image.keepDontIgnoreme()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/NibTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NibTests.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 27-08-15. 6 | // Copyright © 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | @testable import ResourceApp 12 | 13 | class NibTests: XCTestCase { 14 | 15 | func testNibName() { 16 | XCTAssertEqual(R.nib.myView.name, "My View") 17 | } 18 | 19 | func testRelativeToProjectGroup() { 20 | XCTAssertTrue(R.nib.relativeToProject(owner: nil) != nil) 21 | XCTAssertTrue(R.nib.relativeToProject.firstView(owner: nil) != nil) 22 | } 23 | 24 | func testNibIsOfCorrectType() { 25 | XCTAssertTrue(type(of: R.nib.supplementaryElement).Reusable.classForCoder() == UICollectionReusableView.classForCoder()) 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/SegueTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SegueTests.swift 3 | // ResourceApp 4 | // 5 | // Created by Tom Lokhorst on 2016-08-08. 6 | // Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ResourceApp 11 | 12 | class SegueTests: XCTestCase { 13 | 14 | func testSegueNames() { 15 | XCTAssertEqual(R.segue.firstViewController.toSomeStoryboard.identifier, "toSomeStoryboard") 16 | XCTAssertEqual(R.segue.secondViewController.attachedSegue.identifier, "attachedSegue") 17 | XCTAssertEqual(R.segue.secondViewController.recognizerSegue.identifier, "recognizerSegue") 18 | XCTAssertEqual(R.segue.secondViewController.toThird.identifier, "toThird") 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/StoryboardTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StoryboardTests.swift 3 | // ResourceApp 4 | // 5 | // Created by Mathijs Kadijk on 10-01-16. 6 | // Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ResourceApp 11 | 12 | class StoryboardTests: XCTestCase { 13 | 14 | func testStoryboardNames() { 15 | XCTAssertEqual(R.storyboard.main.name, "Main") 16 | XCTAssertEqual(R.storyboard.secondary.name, "Secondary") 17 | XCTAssertEqual(R.storyboard.specials.name, "Specials") 18 | } 19 | 20 | func testStoryboardInitialViewControllers() { 21 | XCTAssertNotNil(R.storyboard.main.instantiateInitialViewController(), "Initial view controller is missing") 22 | XCTAssertNotNil(R.storyboard.secondary.instantiateInitialViewController(), "Initial view controller is missing") 23 | } 24 | 25 | func testStoryboardSpecificViewControllers() { 26 | XCTAssertNotNil(R.storyboard.main.thirdViewController(), "Specific view controller is missing") 27 | XCTAssertNotNil(R.storyboard.specials.glkVC(), "Specific view controller is missing") 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Examples/ResourceApp/ResourceAppTests/ValidationTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValidationTests.swift 3 | // ResourceAppTests 4 | // 5 | // Created by Mathijs Kadijk on 20-07-15. 6 | // Copyright (c) 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | import RswiftResources 12 | @testable import ResourceApp 13 | 14 | class ValidationTests: XCTestCase { 15 | 16 | func testRunGlobalValidateMethod() { 17 | do { 18 | try R.validate() 19 | XCTFail("No error thrown") 20 | } catch let error as ValidationError { 21 | XCTAssertEqual(error.description, "[R.swift] Image named 'First' is used in storyboard 'Secondary', but couldn't be loaded.") 22 | } catch { 23 | XCTFail("Wrong error thrown") 24 | } 25 | } 26 | 27 | func testRunSpecificValidateMethods() { 28 | do { 29 | try R.storyboard.main.validate() 30 | } catch { 31 | XCTFail("Wrong error thrown") 32 | } 33 | 34 | do { 35 | try R.storyboard.secondary.validate() 36 | XCTFail("No error thrown") 37 | } catch let error as ValidationError { 38 | XCTAssertEqual(error.description, "[R.swift] Image named 'First' is used in storyboard 'Secondary', but couldn't be loaded.") 39 | } catch { 40 | XCTFail("Wrong error thrown") 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/App/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/App/Resources/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/App/Sources/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Foo 3 | import Bar 4 | 5 | @main 6 | final class AppDelegate: UIResponder, UIApplicationDelegate { 7 | 8 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { 9 | FooClass().foo() 10 | BarClass().bar() 11 | return true 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/App/Sources/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Foo 3 | import Bar 4 | 5 | final class ViewController: UIViewController { 6 | 7 | @IBOutlet weak var fooImageView: UIImageView! 8 | @IBOutlet weak var barImageView: UIImageView! 9 | 10 | override func viewDidLoad() { 11 | super.viewDidLoad() 12 | fooImageView.image = FooClass().sampleImage() 13 | barImageView.image = BarClass().sampleImage() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/AppTests/AppTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppTests.swift 3 | // AppTests 4 | // 5 | // Created by Tom Lokhorst on 2022-11-10. 6 | // 7 | 8 | import XCTest 9 | @testable import Foo 10 | @testable import Bar 11 | 12 | final class AppTests: XCTestCase { 13 | 14 | func testNotNil() throws { 15 | let fooBundle = Bundle.main.path(forResource: "Foo", ofType: "bundle").flatMap(Bundle.init(path:))! 16 | let barBundle = Bundle.main.path(forResource: "Bar", ofType: "bundle").flatMap(Bundle.init(path:))! 17 | 18 | let fooR = Foo._R(bundle: fooBundle) 19 | let barR = Bar._R(bundle: barBundle) 20 | 21 | XCTAssertNotNil(UIImage(resource: fooR.image.user)) 22 | XCTAssertNotNil(UIImage(resource: barR.image.colorsJpg)) 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Bar/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Bar/Resources/Colors@3x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RswiftAppWithStaticFrameworks/Bar/Resources/Colors@3x.jpg -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Bar/Sources/Bar.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | let bundle = Bundle.main.path(forResource: "Bar", ofType: "bundle").flatMap(Bundle.init(path:))! 4 | 5 | public final class BarClass { 6 | public init() {} 7 | public func bar() { 8 | print("bar") 9 | } 10 | 11 | public func sampleImage() -> UIImage { 12 | R.image(bundle: bundle).colorsJpg()! 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Foo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Foo/Resources/User.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RswiftAppWithStaticFrameworks/Foo/Resources/User.png -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/Foo/Sources/Foo.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | let bundle = Bundle.main.path(forResource: "Foo", ofType: "bundle").flatMap(Bundle.init(path:))! 4 | 5 | public final class FooClass { 6 | public init() {} 7 | public func foo() { 8 | print("foo") 9 | } 10 | 11 | public func sampleImage() -> UIImage { 12 | R.image(bundle: bundle).user()! 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/RswiftAppWithStaticFrameworks.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "1e761a55dd8d73b4e9cc227a297f438413953571", 18 | "version" : "2.11.1" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/RswiftAppWithStaticFrameworks/copy_bundles.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | find "${BUILT_PRODUCTS_DIR}" -d 1 -name "*.framework" | while read framework 3 | do 4 | find -L "${framework}" -name "*.bundle" -d 1 | while read source 5 | do 6 | destination="${TARGET_BUILD_DIR}/${EXECUTABLE_FOLDER_PATH}" 7 | rsync -auv "${source}" "${destination}" || exit 1 8 | done 9 | done 10 | exit 0 11 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "cd466d6e8c5ffd2f2b61165d37b0646f09068e1e", 18 | "version" : "2.9.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/Assets.xcassets/hand.ignoreme.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "hand.ignoreme.png", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RswiftUI/RswiftUI/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // RswiftUI 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | Text("Hello, SwiftUI App!") 13 | .padding() 14 | 15 | Image(R.image.handIgnoreme) 16 | .resizable() 17 | .aspectRatio(1, contentMode: .fit) 18 | .frame(width: 140) 19 | } 20 | } 21 | 22 | struct ContentView_Previews: PreviewProvider { 23 | static var previews: some View { 24 | ContentView() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UIApplicationSceneManifest 24 | 25 | UIApplicationSupportsMultipleScenes 26 | 27 | 28 | UIApplicationSupportsIndirectInputEvents 29 | 30 | UILaunchScreen 31 | 32 | UIRequiredDeviceCapabilities 33 | 34 | armv7 35 | 36 | UISupportedInterfaceOrientations 37 | 38 | UIInterfaceOrientationPortrait 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UISupportedInterfaceOrientations~ipad 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUI/RswiftUIApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RswiftUIApp.swift 3 | // RswiftUI 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct RswiftUIApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/ClipAssets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/ClipAssets.xcassets/MyColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "platform" : "ios", 6 | "reference" : "systemTealColor" 7 | }, 8 | "idiom" : "universal" 9 | }, 10 | { 11 | "appearances" : [ 12 | { 13 | "appearance" : "luminosity", 14 | "value" : "dark" 15 | } 16 | ], 17 | "color" : { 18 | "platform" : "ios", 19 | "reference" : "systemOrangeColor" 20 | }, 21 | "idiom" : "universal" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/ContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContentView.swift 3 | // RswiftUIAppClip 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContentView: View { 11 | var body: some View { 12 | Text("Hello, App Clip!") 13 | .padding() 14 | 15 | Image(R.image.handIgnoreme) 16 | .resizable() 17 | .aspectRatio(1, contentMode: .fit) 18 | .frame(width: 140) 19 | .border(Color(R.color.myColor)) 20 | } 21 | } 22 | 23 | struct ContentView_Previews: PreviewProvider { 24 | static var previews: some View { 25 | ContentView() 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | RswiftUI 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIApplicationSceneManifest 26 | 27 | UIApplicationSupportsMultipleScenes 28 | 29 | 30 | UIApplicationSupportsIndirectInputEvents 31 | 32 | UILaunchScreen 33 | 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/RswiftUIAppClip.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.developer.parent-application-identifiers 6 | 7 | $(AppIdentifierPrefix)nl.mathijskadijk.RswiftUI 8 | 9 | 10 | -------------------------------------------------------------------------------- /Examples/RswiftUI/RswiftUIAppClip/RswiftUIAppClipApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RswiftUIAppClipApp.swift 3 | // RswiftUIAppClip 4 | // 5 | // Created by Tom Lokhorst on 2020-09-15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct RswiftUIAppClipApp: App { 12 | var body: some Scene { 13 | WindowGroup { 14 | ContentView() 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RtvApp/.rswiftignore: -------------------------------------------------------------------------------- 1 | # Filtering single file 2 | ResourceApp/Images/Sky.tiff 3 | 4 | # Corrupt line 5 | 6 | # Ignore all files containing '.ignoreme.' 7 | **/*.ignoreme.* 8 | 9 | # Explicitly include single file 10 | !ResourceApp/ExplicitInclude.ignoreme.png 11 | 12 | # Explicitly include all files containing '.dont.ignoreme.' 13 | !**/*.dont.ignoreme.* 14 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ResourceApp-tvOS 4 | // 5 | // Created by Carl Hill-Popper on 3/24/16. 6 | // Copyright © 2016 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | } 17 | 18 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Large.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/App Icon - Small.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "size" : "1280x768", 5 | "idiom" : "tv", 6 | "filename" : "App Icon - Large.imagestack", 7 | "role" : "primary-app-icon" 8 | }, 9 | { 10 | "size" : "400x240", 11 | "idiom" : "tv", 12 | "filename" : "App Icon - Small.imagestack", 13 | "role" : "primary-app-icon" 14 | }, 15 | { 16 | "size" : "2320x720", 17 | "idiom" : "tv", 18 | "filename" : "Top Shelf Image Wide.imageset", 19 | "role" : "top-shelf-image-wide" 20 | }, 21 | { 22 | "size" : "1920x720", 23 | "idiom" : "tv", 24 | "filename" : "Top Shelf Image.imageset", 25 | "role" : "top-shelf-image" 26 | } 27 | ], 28 | "info" : { 29 | "version" : 1, 30 | "author" : "xcode" 31 | } 32 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Brand Assets.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "version" : 1, 14 | "author" : "xcode" 15 | } 16 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/BrightWhite.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | }, 6 | "colors" : [ 7 | { 8 | "idiom" : "universal", 9 | "color" : { 10 | "color-space" : "srgb", 11 | "components" : { 12 | "red" : "1.000", 13 | "alpha" : "1.000", 14 | "blue" : "1.000", 15 | "green" : "1.000" 16 | } 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "filename" : "allWhiteSmall.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Back.imagestacklayer/Content.imageset/allWhiteSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Back.imagestacklayer/Content.imageset/allWhiteSmall.png -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "layers" : [ 3 | { 4 | "filename" : "Front.imagestacklayer" 5 | }, 6 | { 7 | "filename" : "Middle.imagestacklayer" 8 | }, 9 | { 10 | "filename" : "Back.imagestacklayer" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "filename" : "first.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Front.imagestacklayer/Content.imageset/first.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Front.imagestacklayer/Content.imageset/first.pdf -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "filename" : "second.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "version" : 1, 15 | "author" : "xcode" 16 | } 17 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Middle.imagestacklayer/Content.imageset/second.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Middle.imagestacklayer/Content.imageset/second.pdf -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/ImageStackAsset.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Assets.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "landscape", 5 | "idiom" : "tv", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "11.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "landscape", 12 | "idiom" : "tv", 13 | "extent" : "full-screen", 14 | "minimum-system-version" : "9.0", 15 | "scale" : "1x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceApp-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIcons 10 | 11 | CFBundleIcons~ipad 12 | 13 | CFBundleIdentifier 14 | $(PRODUCT_BUNDLE_IDENTIFIER) 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | $(PRODUCT_NAME) 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 1.0 23 | CFBundleSignature 24 | ???? 25 | CFBundleVersion 26 | 1 27 | LSRequiresIPhoneOS 28 | 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | arm64 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceAppTests-tvOS/ImageTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImagesTests.swift 3 | // ResourceAppTests-tvOS 4 | // 5 | // Created by Mathijs Kadijk on 20-07-15. 6 | // Copyright (c) 2015 Mathijs Kadijk. All rights reserved. 7 | // 8 | import UIKit 9 | import XCTest 10 | @testable import ResourceApp_tvOS 11 | 12 | class ImagesTests: XCTestCase { 13 | 14 | func testNonNilImages() throws { 15 | XCTAssertNotNil(R.image.imageStackAsset()) 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceAppTests-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Examples/RtvApp/ResourceAppTests-tvOS/ValidationTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ValidationTests.swift 3 | // ResourceAppTests-tvOS 4 | // 5 | // Created by Mathijs Kadijk on 06/04/2019. 6 | // Copyright © 2019 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import XCTest 11 | @testable import ResourceApp_tvOS 12 | 13 | class ValidationTests: XCTestCase { 14 | 15 | func testValidation() throws { 16 | try R.validate() 17 | } 18 | } 19 | 20 | -------------------------------------------------------------------------------- /Examples/RtvApp/RtvApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/RtvApp/RtvApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/RtvApp/RtvApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "cd466d6e8c5ffd2f2b61165d37b0646f09068e1e", 18 | "version" : "2.9.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Examples/RwatchApp/.rswiftignore: -------------------------------------------------------------------------------- 1 | # Filtering single file 2 | ResourceApp/Images/Sky.tiff 3 | 4 | # Corrupt line 5 | 6 | # Ignore all files containing '.ignoreme.' 7 | **/*.ignoreme.* 8 | 9 | # Explicitly include single file 10 | !ResourceApp/ExplicitInclude.ignoreme.png 11 | 12 | # Explicitly include all files containing '.dont.ignoreme.' 13 | !**/*.dont.ignoreme.* 14 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : "<=145" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">161" 12 | }, 13 | { 14 | "idiom" : "watch", 15 | "scale" : "2x", 16 | "screen-width" : ">145" 17 | }, 18 | { 19 | "idiom" : "watch", 20 | "scale" : "2x", 21 | "screen-width" : ">183" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "filename" : "Circular.imageset", 5 | "idiom" : "watch", 6 | "role" : "circular" 7 | }, 8 | { 9 | "filename" : "Extra Large.imageset", 10 | "idiom" : "watch", 11 | "role" : "extra-large" 12 | }, 13 | { 14 | "filename" : "Graphic Bezel.imageset", 15 | "idiom" : "watch", 16 | "role" : "graphic-bezel" 17 | }, 18 | { 19 | "filename" : "Graphic Circular.imageset", 20 | "idiom" : "watch", 21 | "role" : "graphic-circular" 22 | }, 23 | { 24 | "filename" : "Graphic Corner.imageset", 25 | "idiom" : "watch", 26 | "role" : "graphic-corner" 27 | }, 28 | { 29 | "filename" : "Graphic Extra Large.imageset", 30 | "idiom" : "watch", 31 | "role" : "graphic-extra-large" 32 | }, 33 | { 34 | "filename" : "Graphic Large Rectangular.imageset", 35 | "idiom" : "watch", 36 | "role" : "graphic-large-rectangular" 37 | }, 38 | { 39 | "filename" : "Modular.imageset", 40 | "idiom" : "watch", 41 | "role" : "modular" 42 | }, 43 | { 44 | "filename" : "Utilitarian.imageset", 45 | "idiom" : "watch", 46 | "role" : "utilitarian" 47 | } 48 | ], 49 | "info" : { 50 | "author" : "xcode", 51 | "version" : 1 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : "<=145" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">161" 12 | }, 13 | { 14 | "idiom" : "watch", 15 | "scale" : "2x", 16 | "screen-width" : ">145" 17 | }, 18 | { 19 | "idiom" : "watch", 20 | "scale" : "2x", 21 | "screen-width" : ">183" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Graphic Bezel.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : ">161" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">183" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Graphic Circular.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : ">161" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">183" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Graphic Corner.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : ">161" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">183" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Graphic Extra Large.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : "<=145" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">161" 12 | }, 13 | { 14 | "idiom" : "watch", 15 | "scale" : "2x", 16 | "screen-width" : ">145" 17 | }, 18 | { 19 | "idiom" : "watch", 20 | "scale" : "2x", 21 | "screen-width" : ">183" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Graphic Large Rectangular.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : ">161" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">183" 12 | } 13 | ], 14 | "info" : { 15 | "author" : "xcode", 16 | "version" : 1 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : "<=145" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">161" 12 | }, 13 | { 14 | "idiom" : "watch", 15 | "scale" : "2x", 16 | "screen-width" : ">145" 17 | }, 18 | { 19 | "idiom" : "watch", 20 | "scale" : "2x", 21 | "screen-width" : ">183" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "scale" : "2x", 6 | "screen-width" : "<=145" 7 | }, 8 | { 9 | "idiom" : "watch", 10 | "scale" : "2x", 11 | "screen-width" : ">161" 12 | }, 13 | { 14 | "idiom" : "watch", 15 | "scale" : "2x", 16 | "screen-width" : ">145" 17 | }, 18 | { 19 | "idiom" : "watch", 20 | "scale" : "2x", 21 | "screen-width" : ">183" 22 | } 23 | ], 24 | "info" : { 25 | "author" : "xcode", 26 | "version" : 1 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/MyColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "extended-srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.188", 9 | "green" : "0.187", 10 | "red" : "1.000" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "extended-srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "1.000", 27 | "green" : "0.838", 28 | "red" : "0.392" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/hand.ignoreme.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "hand.ignoreme.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mac-cain13/R.swift/f0a0d531686138e9f7ad4c2b6bf6115149aeb08b/Examples/RwatchApp/ResourceApp-watchOS-Extension/Assets.xcassets/hand.ignoreme.imageset/hand.ignoreme.png -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | ResourceApp-watchOS Extension 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | XPC! 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | NSExtension 24 | 25 | NSExtensionAttributes 26 | 27 | WKAppBundleIdentifier 28 | nl.mathijskadijk.ResourceApp.watchkitapp 29 | 30 | NSExtensionPointIdentifier 31 | com.apple.watchkit 32 | 33 | WKExtensionDelegateClassName 34 | $(PRODUCT_MODULE_NAME).ExtensionDelegate 35 | 36 | 37 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/InterfaceController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // InterfaceController.swift 3 | // ResourceApp-watchOS Extension 4 | // 5 | // Created by Lammert Westerhoff on 28/08/2018. 6 | // Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import WatchKit 10 | import Foundation 11 | 12 | import RswiftResources 13 | 14 | 15 | 16 | class InterfaceController: WKInterfaceController { 17 | 18 | @IBOutlet weak var label: WKInterfaceLabel! 19 | 20 | override func awake(withContext context: Any?) { 21 | super.awake(withContext: context) 22 | 23 | label.setText(R.string.localizable.quote(11)) 24 | label.setTextColor(UIColor(named: R.color.myColor.name)) 25 | } 26 | 27 | override func willActivate() { 28 | // This method is called when watch view controller is about to be visible to user 29 | super.willActivate() 30 | } 31 | 32 | override func didDeactivate() { 33 | // This method is called when watch view controller is no longer visible 34 | super.didDeactivate() 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/NotificationController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationController.swift 3 | // ResourceApp-watchOS Extension 4 | // 5 | // Created by Lammert Westerhoff on 28/08/2018. 6 | // Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | // 8 | 9 | import WatchKit 10 | import Foundation 11 | import UserNotifications 12 | 13 | 14 | class NotificationController: WKUserNotificationInterfaceController { 15 | 16 | override init() { 17 | // Initialize variables here. 18 | super.init() 19 | 20 | // Configure interface objects here. 21 | } 22 | 23 | override func willActivate() { 24 | // This method is called when watch view controller is about to be visible to user 25 | super.willActivate() 26 | } 27 | 28 | override func didDeactivate() { 29 | // This method is called when watch view controller is no longer visible 30 | super.didDeactivate() 31 | } 32 | 33 | override func didReceive(_ notification: UNNotification) { 34 | // This method is called when a notification needs to be presented. 35 | // Implement it if you use a dynamic notification interface. 36 | // Populate your dynamic notification interface as quickly as possible. 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/PushNotificationPayload.apns: -------------------------------------------------------------------------------- 1 | { 2 | "aps": { 3 | "alert": { 4 | "body": "Test message", 5 | "title": "Optional title", 6 | "subtitle": "Optional subtitle" 7 | }, 8 | "category": "myCategory", 9 | "thread-id":"5280" 10 | }, 11 | 12 | "WatchKit Simulator Actions": [ 13 | { 14 | "title": "First Button", 15 | "identifier": "firstButtonAction" 16 | } 17 | ], 18 | 19 | "customKey": "Use this file to define a testing payload for your notifications. The aps dictionary specifies the category, alert text and title. The WatchKit Simulator Actions array can provide info for one or more action buttons in addition to the standard Dismiss button. Any other top level keys are custom payload. If you have multiple such JSON files in your project, you'll be able to select them when choosing to debug the notification interface of your Watch App." 20 | } 21 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Strings/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | ResourceApp 4 | 5 | Created by Lammert Westerhoff on 28/08/2018. 6 | Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | one = Zero; // Duplicate keys are ignored, a warning from R.swift would be nice 10 | one = One; 11 | two = 2; 12 | 13 | "quote" = "There are %d lights!"; 14 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Strings/es.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | ResourceApp 4 | 5 | Created by Lammert Westerhoff on 28/08/2018. 6 | Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | 10 | one = Uno; 11 | two = 2; 12 | 13 | "quote" = "Hay %d luces!"; 14 | 15 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS-Extension/Strings/ja.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | ResourceApp 4 | 5 | Created by Lammert Westerhoff on 28/08/2018. 6 | Copyright © 2018 Mathijs Kadijk. All rights reserved. 7 | */ 8 | 9 | 10 | one = "一つ"; 11 | two = 2; 12 | 13 | "quote" = "%dつの光があります!"; 14 | "japanese only" = "Not translated in other languages, and there is no Base"; 15 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "watch", 5 | "role" : "notificationCenter", 6 | "scale" : "2x", 7 | "size" : "24x24", 8 | "subtype" : "38mm" 9 | }, 10 | { 11 | "idiom" : "watch", 12 | "role" : "notificationCenter", 13 | "scale" : "2x", 14 | "size" : "27.5x27.5", 15 | "subtype" : "42mm" 16 | }, 17 | { 18 | "idiom" : "watch", 19 | "role" : "companionSettings", 20 | "scale" : "2x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "watch", 25 | "role" : "companionSettings", 26 | "scale" : "3x", 27 | "size" : "29x29" 28 | }, 29 | { 30 | "idiom" : "watch", 31 | "role" : "appLauncher", 32 | "scale" : "2x", 33 | "size" : "40x40", 34 | "subtype" : "38mm" 35 | }, 36 | { 37 | "idiom" : "watch", 38 | "role" : "appLauncher", 39 | "scale" : "2x", 40 | "size" : "44x44", 41 | "subtype" : "40mm" 42 | }, 43 | { 44 | "idiom" : "watch", 45 | "role" : "appLauncher", 46 | "scale" : "2x", 47 | "size" : "50x50", 48 | "subtype" : "44mm" 49 | }, 50 | { 51 | "idiom" : "watch", 52 | "role" : "quickLook", 53 | "scale" : "2x", 54 | "size" : "86x86", 55 | "subtype" : "38mm" 56 | }, 57 | { 58 | "idiom" : "watch", 59 | "role" : "quickLook", 60 | "scale" : "2x", 61 | "size" : "98x98", 62 | "subtype" : "42mm" 63 | }, 64 | { 65 | "idiom" : "watch", 66 | "role" : "quickLook", 67 | "scale" : "2x", 68 | "size" : "108x108", 69 | "subtype" : "44mm" 70 | }, 71 | { 72 | "idiom" : "watch-marketing", 73 | "scale" : "1x", 74 | "size" : "1024x1024" 75 | } 76 | ], 77 | "info" : { 78 | "author" : "xcode", 79 | "version" : 1 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Examples/RwatchApp/ResourceApp-watchOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | ResourceApp 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | UISupportedInterfaceOrientations 24 | 25 | UIInterfaceOrientationPortrait 26 | UIInterfaceOrientationPortraitUpsideDown 27 | 28 | WKCompanionAppBundleIdentifier 29 | nl.mathijskadijk.ResourceApp 30 | WKWatchKitApp 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Examples/RwatchApp/RwatchApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/RwatchApp/RwatchApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/RwatchApp/RwatchApp.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "fddd1c00396eed152c45a46bea9f47b98e59301d", 9 | "version" : "1.2.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "cd466d6e8c5ffd2f2b61165d37b0646f09068e1e", 18 | "version" : "2.9.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014-2023 Mathijs Kadijk 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "swift-argument-parser", 5 | "kind" : "remoteSourceControl", 6 | "location" : "https://github.com/apple/swift-argument-parser", 7 | "state" : { 8 | "revision" : "41982a3656a71c768319979febd796c6fd111d5c", 9 | "version" : "1.5.0" 10 | } 11 | }, 12 | { 13 | "identity" : "xcodeedit", 14 | "kind" : "remoteSourceControl", 15 | "location" : "https://github.com/tomlokhorst/XcodeEdit", 16 | "state" : { 17 | "revision" : "0e550cdee72844b35431afc3a1e176042be6d0f0", 18 | "version" : "2.13.0" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /R.swift.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | 3 | spec.name = "R.swift" 4 | spec.version = ENV['POD_VERSION'] 5 | spec.license = "MIT" 6 | 7 | spec.summary = "Get strong typed, autocompleted resources like images, fonts and segues in Swift projects" 8 | spec.description = <<-DESC 9 | R.swift is a tool to get strong typed, autocompleted resources like images, fonts and segues in Swift projects. 10 | 11 | * Never type string identifiers again 12 | * Supports images, fonts, storyboards, nibs, segues, reuse identifiers and more 13 | * Compile time checks and errors instead of runtime crashes 14 | DESC 15 | spec.homepage = "https://github.com/mac-cain13/R.swift" 16 | spec.documentation_url = "https://github.com/mac-cain13/R.swift/tree/master/Documentation" 17 | spec.screenshots = [ "https://raw.githubusercontent.com/mac-cain13/R.swift/master/Documentation/Images/DemoUseImage.gif", 18 | "https://raw.githubusercontent.com/mac-cain13/R.swift/master/Documentation/Images/DemoRenameImage.gif" ] 19 | 20 | spec.author = { "Mathijs Kadijk" => "mkadijk@gmail.com" } 21 | spec.social_media_url = "https://twitter.com/mac_cain13" 22 | 23 | spec.requires_arc = true 24 | spec.source = { :http => "https://github.com/mac-cain13/R.swift/releases/download/#{spec.version}/rswift-#{spec.version}.zip" } 25 | spec.swift_version = "5.7" 26 | 27 | spec.osx.deployment_target = '10.15' 28 | spec.ios.deployment_target = '12' 29 | spec.tvos.deployment_target = '12' 30 | spec.watchos.deployment_target = '4' 31 | 32 | spec.preserve_paths = "rswift" 33 | spec.source_files = "Sources/RswiftResources/**/*.swift" 34 | spec.module_name = "RswiftResources" 35 | 36 | end 37 | -------------------------------------------------------------------------------- /Sources/RswiftGenerators/Extensions/Array+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Array+Extensions.swift 3 | // RswiftGenerators 4 | // 5 | // Created by Tom Lokhorst on 2022-10-11. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Array where Element: Comparable, Element: Hashable { 11 | func uniqueAndSorted() -> [Element] { 12 | Set(self).sorted() 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Sources/RswiftGenerators/Extensions/String+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // String+Extensions.swift 3 | // RswiftGenerators 4 | // 5 | // Created by Tom Lokhorst on 2021-04-18. 6 | // 7 | 8 | import Foundation 9 | 10 | extension String { 11 | var lowercaseFirstCharacter: String { 12 | if self.count <= 1 { return self.lowercased() } 13 | let index = self.index(startIndex, offsetBy: 1) 14 | return self[.. String { 24 | return self 25 | .components(separatedBy: "\n") 26 | .map { line in line .isEmpty ? "" : "\(indentation)\(line)" } 27 | .joined(separator: "\n") 28 | } 29 | 30 | var fullRange: NSRange { 31 | return NSRange(location: 0, length: self.count) 32 | } 33 | 34 | var escapedStringLiteral: String { 35 | return self 36 | .replacingOccurrences(of: "\\", with: "\\\\") 37 | .replacingOccurrences(of: "\"", with: "\\\"") 38 | .replacingOccurrences(of: "\t", with: "\\t") 39 | .replacingOccurrences(of: "\r", with: "\\r") 40 | .replacingOccurrences(of: "\n", with: "\\n") 41 | } 42 | 43 | var commentString: String { 44 | return self 45 | .replacingOccurrences(of: "\r\n", with: " ") 46 | .replacingOccurrences(of: "\r", with: " ") 47 | .replacingOccurrences(of: "\n", with: " ") 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /Sources/RswiftGenerators/Shared/AssetCatalogMergedNamespaces.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AssetCatalogMergedNamespaces.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2017-06-06. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | struct AssetCatalogMergedNamespaces { 12 | var namespaces: [SwiftIdentifier: AssetCatalog.Namespace] = [:] 13 | var duplicates: [(SwiftIdentifier, String)] = [] 14 | 15 | init(all: [String: AssetCatalog.Namespace], otherIdentifiers: [SwiftIdentifier]) { 16 | for (name, namespace) in all { 17 | let id = SwiftIdentifier(name: name) 18 | if otherIdentifiers.contains(id) { 19 | duplicates.append((id, name)) 20 | } else { 21 | namespaces[id, default: .init()].merge(namespace) 22 | } 23 | } 24 | } 25 | 26 | func printWarningsForDuplicates(result: String, warning: (String) -> Void) { 27 | for (identifier, name) in duplicates { 28 | warning("Skipping asset namespace '\(name)' because symbol '\(identifier.value)' would conflict with \(result): \(identifier.value)") 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/RswiftGenerators/Shared/LocaleReference+Generator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-22. 6 | // 7 | 8 | import RswiftResources 9 | 10 | extension LocaleReference { 11 | func codeString() -> String { 12 | switch self { 13 | case .none: 14 | return "LocaleReference.none" // Plain `.none` is ambiguous whith Optional 15 | case .base: 16 | return ".base" 17 | case .language(let string): 18 | return #".language("\#(string)")"# 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /Sources/RswiftGenerators/XcodeProject+Generator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // XcodeProjectGenerator.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-11-03. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct XcodeProjectGenerator { 11 | public static func generateProject(developmentRegion: String?, knownAssetTags: [String]?) -> Struct { 12 | Struct(name: SwiftIdentifier(name: "project")) { 13 | let warning: (String) -> Void = { print("warning: [R.swift]", $0) } 14 | 15 | if let developmentRegion { 16 | LetBinding(name: SwiftIdentifier(name: "developmentRegion"), valueCodeString: #""\#(developmentRegion)""#) 17 | } 18 | 19 | if let knownAssetTags { 20 | let grouped = knownAssetTags.grouped(bySwiftIdentifier: { $0 }) 21 | grouped.reportWarningsForDuplicatesAndEmpties(source: "known asset tag", result: "known asset tag", warning: warning) 22 | if grouped.uniques.count > 0 { 23 | Struct(name: SwiftIdentifier(name: "knownAssetTags"), protocols: [.sequence]) { 24 | grouped.uniques.map { tag in 25 | LetBinding(name: SwiftIdentifier(name: tag), valueCodeString: #""\#(tag)""#) 26 | } 27 | 28 | generateMakeIterator(names: grouped.uniques.map { SwiftIdentifier(name: $0) }) 29 | } 30 | } 31 | } 32 | } 33 | } 34 | 35 | private static func generateMakeIterator(names: [SwiftIdentifier]) -> Function { 36 | Function( 37 | comments: [], 38 | name: .init(name: "makeIterator"), 39 | params: [], 40 | returnType: .indexingIterator(.string), 41 | valueCodeString: "[\(names.map(\.value).joined(separator: ", "))].makeIterator()" 42 | ) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Resources/FileResource+Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | extension FileResource { 12 | // These are all extensions of resources that are passed to some special compiler step and not directly available at runtime 13 | static public let unsupportedExtensions: Set = [ 14 | AssetCatalog.supportedExtensions, 15 | StringsTable.supportedExtensions, 16 | NibResource.supportedExtensions, 17 | StoryboardResource.supportedExtensions, 18 | ] 19 | .reduce([]) { $0.union($1) } 20 | 21 | static public func parse(url: URL) throws -> FileResource { 22 | guard let basename = url.filenameWithoutExtension else { 23 | throw ResourceParsingError("Couldn't extract filename from URL: \(url)") 24 | } 25 | 26 | let locale = LocaleReference(url: url) 27 | 28 | return FileResource( 29 | name: basename, 30 | pathExtension: url.pathExtension, 31 | bundle: .temp, 32 | locale: locale 33 | ) 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Resources/FontResource+Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FontResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | #if canImport(CoreGraphics) 12 | import CoreGraphics 13 | #endif 14 | 15 | extension FontResource: SupportedExtensions { 16 | static public let supportedExtensions: Set = ["otf", "ttf"] 17 | 18 | #if canImport(CoreGraphics) 19 | static public func parse(url: URL) throws -> FontResource { 20 | guard let dataProvider = CGDataProvider(url: url as CFURL) else { 21 | throw ResourceParsingError("Unable to create data provider for font at \(url)") 22 | } 23 | 24 | let font = CGFont(dataProvider) 25 | guard let postScriptName = font?.postScriptName else { 26 | throw ResourceParsingError("No postscriptName associated to font at \(url)") 27 | } 28 | 29 | return FontResource( 30 | name: postScriptName as String, 31 | bundle: .temp, 32 | filename: url.lastPathComponent 33 | ) 34 | } 35 | #else 36 | static public func parse(url: URL) throws -> FontResource { 37 | throw ResourceParsingError("Unsupported FontResource.parse") 38 | } 39 | #endif 40 | } 41 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Resources/ImageResource+Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | extension ImageResource: SupportedExtensions { 12 | // See "Supported Image Formats" on https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIImage_Class/ 13 | static public let supportedExtensions: Set = ["tiff", "tif", "jpg", "jpeg", "gif", "png", "bmp", "bmpf", "ico", "cur", "xbm"] 14 | 15 | static public func parse(url: URL, assetTags: [String]?) throws -> ImageResource { 16 | let filename = url.lastPathComponent 17 | let pathExtension = url.pathExtension 18 | guard filename.count > 0 && pathExtension.count > 0 else { 19 | throw ResourceParsingError("Filename and/or extension could not be parsed from URL: \(url.absoluteString)") 20 | } 21 | 22 | let locale = LocaleReference(url: url) 23 | 24 | let extensions = ImageResource.supportedExtensions.joined(separator: "|") 25 | let regex = try! NSRegularExpression(pattern: "(~(ipad|iphone))?(@[2,3]x)?\\.(\(extensions))$", options: .caseInsensitive) 26 | let fullFileNameRange = NSRange(location: 0, length: filename.count) 27 | let pathExtensionToUse = (pathExtension == "png") ? "" : ".\(pathExtension)" 28 | let name = regex.stringByReplacingMatches(in: filename, options: NSRegularExpression.MatchingOptions(rawValue: 0), range: fullFileNameRange, withTemplate: pathExtensionToUse) 29 | 30 | return ImageResource(name: name, path: [], bundle: .temp, locale: locale, onDemandResourceTags: assetTags) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Resources/PropertyList+Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PropertyList.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2018-07-08. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | extension PropertyListResource { 12 | static public func parse(url: URL, buildConfigurationName: String) throws -> PropertyListResource { 13 | guard 14 | let nsDictionary = NSDictionary(contentsOf: url), 15 | let dictionary = nsDictionary as? [String: Any] 16 | else { 17 | throw ResourceParsingError("File could not be parsed as InfoPlist from URL: \(url.absoluteString)") 18 | } 19 | 20 | return PropertyListResource(buildConfigurationName: buildConfigurationName, contents: dictionary, url: url) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/Bundle+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bundle+Extensions.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-09-30. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Bundle { 11 | public static let temp: Bundle = .main 12 | } 13 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/DeploymentTarget+Parser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DeploymentTarget+Parser.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-10. 6 | // 7 | 8 | import RswiftResources 9 | 10 | func parseDeploymentTargetVersion(_ str: String) -> DeploymentTarget.Version? { 11 | guard str.count > 2 else { return nil } 12 | guard let i = Int(str) else { return nil } 13 | let s = String(i, radix: 16) 14 | guard 15 | let major = Int(s[.. Bool { 12 | generatedIdRegex.firstMatch(in: input, range: NSRange(location: 0, length: input.utf16.count)) != nil 13 | } 14 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/ResourceParsingError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ResourceParsingError.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2021-04-16. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ResourceParsingError: Error { 11 | public var description: String 12 | 13 | public init(_ description: String) { 14 | self.description = description 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/SourceTreeURLs.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SourceTreeURLs.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-29. 6 | // 7 | 8 | import Foundation 9 | import XcodeEdit 10 | 11 | public struct SourceTreeURLs { 12 | public let builtProductsDirURL: URL 13 | public let developerDirURL: URL 14 | public let sourceRootURL: URL 15 | public let sdkRootURL: URL 16 | public let platformURL: URL 17 | 18 | public init(builtProductsDirURL: URL, developerDirURL: URL, sourceRootURL: URL, sdkRootURL: URL, platformURL: URL) { 19 | self.builtProductsDirURL = builtProductsDirURL 20 | self.developerDirURL = developerDirURL 21 | self.sourceRootURL = sourceRootURL 22 | self.sdkRootURL = sdkRootURL 23 | self.platformURL = platformURL 24 | } 25 | 26 | public func url(for sourceTreeFolder: SourceTreeFolder) -> URL { 27 | switch sourceTreeFolder { 28 | case .buildProductsDir: 29 | return builtProductsDirURL 30 | case .developerDir: 31 | return developerDirURL 32 | case .sdkRoot: 33 | return sdkRootURL 34 | case .sourceRoot: 35 | return sourceRootURL 36 | case .platformDir: 37 | return platformURL 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/SupportedExtensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SupportedExtensions.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 10-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol SupportedExtensions { 11 | static var supportedExtensions: Set { get } 12 | } 13 | 14 | extension SupportedExtensions { 15 | static func throwIfUnsupportedExtension(_ url: URL) throws { 16 | let pathExtension = url.pathExtension 17 | 18 | if !supportedExtensions.contains(pathExtension.lowercased()) { 19 | throw ResourceUnsupportedExtensionError(url: url, typeName: "\(Self.self)", supportedExtensions: supportedExtensions) 20 | } 21 | } 22 | } 23 | 24 | public struct ResourceUnsupportedExtensionError: LocalizedError { 25 | public let url: URL 26 | public let typeName: String 27 | public let supportedExtensions: Set 28 | 29 | public init(url: URL, typeName: String, supportedExtensions: Set) { 30 | self.url = url 31 | self.typeName = typeName 32 | self.supportedExtensions = supportedExtensions 33 | } 34 | 35 | public var errorDescription: String { 36 | "URL '\(url)' has not supported extension, for type '\(typeName)', supported extensions \(supportedExtensions.joined(separator: ", "))" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/TypeReference+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TypeReference+Extensions.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-06-24. 6 | // 7 | 8 | import Foundation 9 | import RswiftResources 10 | 11 | extension TypeReference { 12 | static let nsView = TypeReference(module: .appKit, rawName: "NSView") 13 | static let nsViewController = TypeReference(module: .appKit, rawName: "NSViewController") 14 | static let nsStoryboardSegue = TypeReference(module: .appKit, rawName: "NSStoryboardSegue") 15 | 16 | static let uiView = TypeReference(module: .uiKit, rawName: "UIView") 17 | static let uiViewController = TypeReference(module: .uiKit, rawName: "UIViewController") 18 | static let uiStoryboardSegue = TypeReference(module: .uiKit, rawName: "UIStoryboardSegue") 19 | } 20 | -------------------------------------------------------------------------------- /Sources/RswiftParsers/Shared/URL+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // URL+Extensions.swift 3 | // RswiftResources 4 | // 5 | // Created by Tom Lokhorst on 2021-04-25. 6 | // 7 | 8 | import Foundation 9 | 10 | internal extension URL { 11 | var filenameWithoutExtension: String? { 12 | let name = self.deletingPathExtension().lastPathComponent 13 | return name == "" ? nil : name 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Sources/RswiftResources/AssetCatalog.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AssetCatalog.swift 3 | // RswiftResources 4 | // 5 | // Created by Tom Lokhorst on 2021-06-13. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct AssetCatalog: Sendable { 11 | public let filename: String 12 | public let root: Namespace 13 | 14 | public init(filename: String, root: Namespace) { 15 | self.filename = filename 16 | self.root = root 17 | } 18 | } 19 | 20 | extension AssetCatalog { 21 | public struct Namespace: Sendable { 22 | public var subnamespaces: [String: Namespace] = [:] 23 | public var colors: [ColorResource] = [] 24 | public var images: [ImageResource] = [] 25 | public var dataAssets: [DataResource] = [] 26 | 27 | public init() { 28 | } 29 | 30 | public init( 31 | subnamespaces: [String: Namespace], 32 | colors: [ColorResource], 33 | images: [ImageResource], 34 | dataAssets: [DataResource] 35 | ) { 36 | self.subnamespaces = subnamespaces 37 | self.colors = colors 38 | self.images = images 39 | self.dataAssets = dataAssets 40 | } 41 | 42 | public mutating func merge(_ other: Namespace) { 43 | self.subnamespaces = self.subnamespaces.merging(other.subnamespaces) { $0.merging($1) } 44 | self.colors += other.colors 45 | self.images += other.images 46 | self.dataAssets += other.dataAssets 47 | } 48 | 49 | public func merging(_ other: Namespace) -> Namespace { 50 | var new = self 51 | new.merge(other) 52 | return new 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Sources/RswiftResources/ColorResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ColorResource.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-23. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ColorResource: Sendable { 11 | public let name: String 12 | public let path: [String] 13 | public let bundle: Bundle 14 | 15 | public init(name: String, path: [String], bundle: Bundle) { 16 | self.name = name 17 | self.path = path 18 | self.bundle = bundle 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Sources/RswiftResources/DataResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataResource.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-23. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct DataResource: Sendable { 11 | public let name: String 12 | public let path: [String] 13 | public let bundle: Bundle 14 | public let onDemandResourceTags: [String]? 15 | 16 | public init(name: String, path: [String], bundle: Bundle, onDemandResourceTags: [String]?) { 17 | self.name = name 18 | self.path = path 19 | self.bundle = bundle 20 | self.onDemandResourceTags = onDemandResourceTags 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/RswiftResources/FileResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FileResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct FileResource: Sendable { 11 | public let name: String 12 | public let pathExtension: String 13 | public let bundle: Bundle 14 | public let locale: LocaleReference? 15 | 16 | public init(name: String, pathExtension: String, bundle: Bundle, locale: LocaleReference?) { 17 | self.name = name 18 | self.pathExtension = pathExtension 19 | self.bundle = bundle 20 | self.locale = locale 21 | } 22 | 23 | public var filename: String { 24 | name.isEmpty || pathExtension.isEmpty 25 | ? "\(name)\(pathExtension)" 26 | : "\(name).\(pathExtension)" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /Sources/RswiftResources/FontResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FontResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct FontResource: Sendable { 11 | public let name: String 12 | public let bundle: Bundle 13 | public let filename: String 14 | 15 | public init(name: String, bundle: Bundle, filename: String) { 16 | self.name = name 17 | self.bundle = bundle 18 | self.filename = filename 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Sources/RswiftResources/ImageResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 09-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct ImageResource: Sendable { 11 | public let name: String 12 | public let path: [String] 13 | public let bundle: Bundle 14 | public let locale: LocaleReference? 15 | public let onDemandResourceTags: [String]? 16 | 17 | public init(name: String, path: [String], bundle: Bundle, locale: LocaleReference?, onDemandResourceTags: [String]?) { 18 | self.name = name 19 | self.path = path 20 | self.bundle = bundle 21 | self.locale = locale 22 | self.onDemandResourceTags = onDemandResourceTags 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Integrations/DataResource+Integrations.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataResource+Integrations.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-31. 6 | // 7 | 8 | import Foundation 9 | 10 | #if canImport(UIKit) 11 | import UIKit 12 | #elseif canImport(AppKit) 13 | import AppKit 14 | #endif 15 | 16 | #if canImport(UIKit) || canImport(AppKit) 17 | extension NSDataAsset { 18 | 19 | /** 20 | Returns the data asset from this resource (`R.data.*`) 21 | 22 | - parameter resource: The resource you want the data asset of (`R.data.*`) 23 | */ 24 | public convenience init?(resource: DataResource) { 25 | self.init(name: resource.name, bundle: resource.bundle) 26 | } 27 | 28 | } 29 | 30 | extension DataResource { 31 | 32 | /** 33 | Returns the raw data values from this resource (`R.data.*`) 34 | 35 | - parameter resource: The resource you want the data asset of (`R.data.*`) 36 | */ 37 | public func callAsFunction() -> Data? { 38 | NSDataAsset(resource: self)?.data 39 | } 40 | } 41 | #endif 42 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Integrations/FileResource+Integrations.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Bundle+FileResource.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 10-01-16. 6 | // 7 | 8 | import Foundation 9 | 10 | extension FileResource { 11 | /** 12 | Returns the file URL for the given resource (`R.file.*`). 13 | 14 | - returns: The file URL for the resource file (`R.file.*`) or nil if the file could not be located. 15 | */ 16 | public func url() -> URL? { 17 | bundle.url(forResource: name, withExtension: pathExtension) 18 | } 19 | 20 | /** 21 | Returns the file URL for the given resource (`R.file.*`). 22 | 23 | - returns: The file URL for the resource file (`R.file.*`) or nil if the file could not be located. 24 | */ 25 | @available(*, renamed: "url()") 26 | public func callAsFunction() -> URL? { 27 | url() 28 | } 29 | } 30 | 31 | extension Bundle { 32 | /** 33 | Returns the file URL for the given resource (`R.file.*`). 34 | 35 | - parameter resource: The resource to get the file URL for (`R.file.*`). 36 | 37 | - returns: The file URL for the resource file (`R.file.*`) or nil if the file could not be located. 38 | */ 39 | public func url(forResource resource: FileResource) -> URL? { 40 | url(forResource: resource.name, withExtension: resource.pathExtension) 41 | } 42 | 43 | /** 44 | Returns the full pathname for the resource (`R.file.*`). 45 | 46 | - parameter resource: The resource file to get the path for (`R.file.*`). 47 | 48 | - returns: The full pathname for the resource file (`R.file.*`) or nil if the file could not be located. 49 | */ 50 | public func path(forResource resource: FileResource) -> String? { 51 | path(forResource: resource.name, ofType: resource.pathExtension) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Sources/RswiftResources/PropertyListResource.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PropertyListResource.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2018-07-08. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct PropertyListResource { 11 | public typealias Contents = [String: Any] 12 | 13 | public let buildConfigurationName: String 14 | public let contents: Contents 15 | public let url: URL 16 | 17 | public init(buildConfigurationName: String, contents: Contents, url: URL) { 18 | self.buildConfigurationName = buildConfigurationName 19 | self.contents = contents 20 | self.url = url 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/DeploymentTarget.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DeploymentTarget.swift 3 | // 4 | // 5 | // Created by Tom Lokhorst on 2022-07-10. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct DeploymentTarget: Equatable, Sendable { 11 | public typealias Version = (major: Int, minor: Int) 12 | 13 | public let version: Version? 14 | public let platform: String 15 | 16 | public init(version: Version?, platform: String) { 17 | self.version = version 18 | self.platform = platform 19 | } 20 | 21 | public static func ==(lhs: DeploymentTarget, rhs: DeploymentTarget) -> Bool { 22 | lhs.platform == rhs.platform 23 | && lhs.version?.major == rhs.version?.major 24 | && lhs.version?.minor == rhs.version?.minor 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/LocaleReference.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Locale.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2016-04-24. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum LocaleReference: Hashable, Sendable { 11 | case none 12 | case base // Older projects use a "Base" locale 13 | case language(String) 14 | 15 | public var isNone: Bool { 16 | if case .none = self { 17 | return true 18 | } 19 | 20 | return false 21 | } 22 | 23 | public var isBase: Bool { 24 | if case .base = self { 25 | return true 26 | } 27 | 28 | return false 29 | } 30 | } 31 | 32 | extension LocaleReference { 33 | public init(url: URL) { 34 | if let localeComponent = url.pathComponents.dropLast().last , localeComponent.hasSuffix(".lproj") { 35 | let lang = localeComponent.replacingOccurrences(of: ".lproj", with: "") 36 | 37 | if lang == "Base" { 38 | self = .base 39 | } else { 40 | self = .language(lang) 41 | } 42 | } 43 | else { 44 | self = .none 45 | } 46 | } 47 | 48 | public var localeDescription: String? { 49 | switch self { 50 | case .none: 51 | return nil 52 | 53 | case .base: 54 | return "Base" 55 | 56 | case .language(let language): 57 | return language 58 | } 59 | } 60 | 61 | public func debugDescription(filename: String) -> String { 62 | switch self { 63 | case .none: 64 | return "'\(filename)'" 65 | case .base: 66 | return "'\(filename)' (Base)" 67 | case .language(let language): 68 | return "'\(filename)' (\(language))" 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/ModuleReference.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ModuleReference.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 11-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public enum ModuleReference: Hashable, Sendable { 11 | case host 12 | case stdLib 13 | case custom(name: String) 14 | 15 | public init(name: String?, fallback: ModuleReference = .host) { 16 | let cleaned = name?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" 17 | self = cleaned.isEmpty ? fallback : .custom(name: cleaned) 18 | } 19 | 20 | public var isCustom: Bool { 21 | switch self { 22 | case .custom: 23 | return true 24 | default: 25 | return false 26 | } 27 | } 28 | 29 | public var name: String? { 30 | if case .custom(let name) = self { 31 | return name 32 | } else { 33 | return nil 34 | } 35 | } 36 | } 37 | 38 | extension ModuleReference { 39 | public static var uiKit: ModuleReference { .custom(name: "UIKit") } 40 | public static var appKit: ModuleReference { .custom(name: "AppKit") } 41 | public static var coreText: ModuleReference { .custom(name: "CoreText") } 42 | public static var foundation: ModuleReference { .custom(name: "Foundation") } 43 | public static var rswiftResources: ModuleReference { .custom(name: "RswiftResources") } 44 | } 45 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/NameCatalog.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NameCatalog.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2020-05-08. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct NameCatalog: Hashable, Comparable, Sendable { 11 | public let name: String 12 | public let catalog: String? 13 | 14 | public var isSystemCatalog: Bool { 15 | catalog == "System" // for colors 16 | || catalog == "system" // for images 17 | } 18 | 19 | public init(name: String, catalog: String?) { 20 | self.name = name 21 | self.catalog = catalog 22 | } 23 | 24 | static public func < (lhs: NameCatalog, rhs: NameCatalog) -> Bool { 25 | lhs.name < rhs.name 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/Reusable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReusableContainer.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 10-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct Reusable: Hashable, Sendable { 11 | public let identifier: String 12 | public let type: TypeReference 13 | 14 | public init(identifier: String, type: TypeReference) { 15 | self.identifier = identifier 16 | self.type = type 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/StringParam.swift: -------------------------------------------------------------------------------- 1 | // 2 | // StringParam.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2016-04-18. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct StringParam: Equatable, Sendable { 11 | public let name: String? 12 | public let spec: FormatSpecifier 13 | 14 | public init(name: String?, spec: FormatSpecifier) { 15 | self.name = name 16 | self.spec = spec 17 | } 18 | } 19 | 20 | public enum FormatPart: Sendable { 21 | case spec(FormatSpecifier) 22 | case reference(String) 23 | 24 | public var formatSpecifier: FormatSpecifier? { 25 | switch self { 26 | case .spec(let formatSpecifier): 27 | return formatSpecifier 28 | 29 | case .reference: 30 | return nil 31 | } 32 | } 33 | } 34 | 35 | // https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265-SW1 36 | public enum FormatSpecifier: Sendable { 37 | case object 38 | case double 39 | case int 40 | case uInt 41 | case character 42 | case cStringPointer 43 | case voidPointer 44 | case topType 45 | } 46 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/StringsTable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LocalizableStrings.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2016-04-24. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct StringsTable: Sendable { 11 | public let filename: String 12 | public let locale: LocaleReference 13 | public let dictionary: [Key: Value] 14 | 15 | public init(filename: String, locale: LocaleReference, dictionary: [Key: Value]) { 16 | self.filename = filename 17 | self.locale = locale 18 | self.dictionary = dictionary 19 | } 20 | 21 | public typealias Key = String 22 | public struct Value: Sendable { 23 | public let params: [StringParam] 24 | public let originalValue: String 25 | 26 | public init(params: [StringParam], originalValue: String) { 27 | self.params = params 28 | self.originalValue = originalValue 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/TypeReference.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TypeReference.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 10-12-15. 6 | // 7 | 8 | import Foundation 9 | 10 | public struct TypeReference: Hashable, Sendable { 11 | public let module: ModuleReference 12 | public let name: String 13 | public var genericArgs: [TypeReference] 14 | 15 | public init(module: ModuleReference, rawName: String) { 16 | self.module = module 17 | self.name = rawName 18 | self.genericArgs = [] 19 | } 20 | 21 | public init(module: ModuleReference, name: String, genericArgs: [TypeReference]) { 22 | self.module = module 23 | self.name = name 24 | self.genericArgs = genericArgs 25 | } 26 | 27 | public var allModuleReferences: Set { 28 | Set(genericArgs.flatMap(\.allModuleReferences)).union([module]) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/Unifiable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Unifiable.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2016-04-30. 6 | // 7 | 8 | import Foundation 9 | 10 | public protocol Unifiable { 11 | func unify(_ other: Self) -> Self? 12 | } 13 | 14 | extension Array where Element : Unifiable { 15 | public func unify(_ other: [Element]) -> [Element]? { 16 | var result = self 17 | 18 | for (ix, right) in other.enumerated() { 19 | if let left = result[safe: ix] { 20 | if let unified = left.unify(right) { 21 | result[ix] = unified 22 | } 23 | else { 24 | return nil 25 | } 26 | } 27 | else { 28 | result.append(right) 29 | } 30 | } 31 | 32 | return result 33 | } 34 | } 35 | 36 | private extension Array { 37 | subscript (safe index: Int) -> Element? { 38 | indices ~= index ? self[index] : nil 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /Sources/RswiftResources/Shared/ValidationError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Validatable.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 17-12-15. 6 | // From: https://github.com/mac-cain13/R.swift 7 | // 8 | 9 | import Foundation 10 | 11 | /// Error thrown during validation 12 | public struct ValidationError: Error, CustomStringConvertible, Sendable { 13 | /// Human readable description 14 | public let description: String 15 | 16 | public init(_ description: String) { 17 | self.description = description 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Sources/rswift/Config.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Config.swift 3 | // R.swift 4 | // 5 | // Created by Tom Lokhorst on 2017-04-22. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Config { 11 | static let version = "Unknown" 12 | } 13 | -------------------------------------------------------------------------------- /Tests/RswiftGeneratorsTests/MainTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MainTests.swift 3 | // R.swift 4 | // 5 | // Created by Mathijs Kadijk on 28-09-15. 6 | // 7 | 8 | import XCTest 9 | @testable import RswiftGenerators 10 | 11 | class MainTests: XCTestCase { 12 | override func setUp() { 13 | super.setUp() 14 | } 15 | 16 | override func tearDown() { 17 | super.tearDown() 18 | } 19 | 20 | let swiftNameData = [ 21 | "easy": "easy", 22 | "easyAndSimple": "easyAndSimple", 23 | "easy with some spaces": "easyWithSomeSpaces", 24 | "(looks) easy": "looksEasy", 25 | "looks-easy": "looksEasy", 26 | "looks+like^some-kind*of%easy": "looksLikeSomeKindOfEasy", 27 | "(looks) easy, but it's not really NeXT that easy!": "looksEasyButItSNotReallyNeXTThatEasy", 28 | "easy 123 and done...": "easy123AndDone", 29 | "123 easy!": "easy", 30 | "123 456easy": "easy", 31 | "123 😄": "😄", 32 | "🇳🇱": "🇳🇱", 33 | "🌂MakeItRain!": "🌂MakeItRain", 34 | "PRFXMyClass": "prfxMyClass", 35 | "NSSomeThing": "nsSomeThing", 36 | "MyClass": "myClass", 37 | "PRFX_MyClass": "prfx_MyClass", 38 | "PRFX-myClass": "prfxMyClass", 39 | "123NSSomeThing": "nsSomeThing", 40 | "PR123FXMyClass": "pr123FXMyClass" 41 | ] 42 | 43 | func testSwiftNameSanitization() { 44 | swiftNameData.forEach { 45 | let sanitizedResult = SwiftIdentifier(name: $0.0, lowercaseStartingCharacters: true).value 46 | XCTAssertEqual(sanitizedResult, $0.1) 47 | } 48 | } 49 | 50 | func testPerformanceSwiftNameSanitization() { 51 | // This is an example of a performance test case. 52 | self.measure { 53 | (0...1000).forEach { _ in 54 | let _ = SwiftIdentifier(name: "(looks) easy, but it's not reallY that easy!", lowercaseStartingCharacters: true) 55 | } 56 | } 57 | } 58 | 59 | } 60 | --------------------------------------------------------------------------------