diff --git a/Config.xcconfig b/Config.xcconfig index 79384feb..2449efd9 100644 --- a/Config.xcconfig +++ b/Config.xcconfig @@ -28,6 +28,7 @@ CFG_TEAM_ID = DTDYD63ZX9 CFG_APP_ID = com.algoritmico.ios.Passepartout +CFG_MAC_ID = com.algoritmico.ios.PassepartoutMac CFG_LAUNCHER_ID = com.algoritmico.ios.PassepartoutLauncher CFG_GROUP_ID = com.algoritmico.Passepartout CFG_APPSTORE_ID = 1433648537 diff --git a/Passepartout.xcodeproj/project.pbxproj b/Passepartout.xcodeproj/project.pbxproj index 0eeb95ed..dd32b69d 100644 --- a/Passepartout.xcodeproj/project.pbxproj +++ b/Passepartout.xcodeproj/project.pbxproj @@ -12,12 +12,19 @@ 0E0392772818732D00827C10 /* BuildProducts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0392762818732D00827C10 /* BuildProducts.swift */; }; 0E039279281890B100827C10 /* AddHostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E039278281890B100827C10 /* AddHostView.swift */; }; 0E065F112813269500062CAF /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E065F102813269500062CAF /* WelcomeView.swift */; }; + 0E0838F22872C5FB00A34EC0 /* ItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */; }; + 0E0838F82874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */; }; + 0E0838FA2877325A00A34EC0 /* LightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */; }; + 0E0838FB2877325A00A34EC0 /* LightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */; }; + 0E0838FD2877334300A34EC0 /* DefaultLightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */; }; 0E09E35D2834172800BE1BAE /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 0E09E35C2834172800BE1BAE /* Credits.rtf */; }; 0E0BD27327B2EA2C00583AC5 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27227B2EA2C00583AC5 /* MainView.swift */; }; 0E0BD27627B2EB2200583AC5 /* DonateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27527B2EB2200583AC5 /* DonateView.swift */; }; 0E0BD27927B2EBE500583AC5 /* ShortcutsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27827B2EBE500583AC5 /* ShortcutsView.swift */; }; 0E0C0729236087A100155AAC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E0C072B236087A100155AAC /* InfoPlist.strings */; }; 0E12BC8F27F62C8600B2F912 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E12BC8E27F62C8500B2F912 /* Validators.swift */; }; + 0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */; }; + 0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */; }; 0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293850285A70AC002A6E0E /* AppPreference.swift */; }; 0E293857285A73BC002A6E0E /* AppContext+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293856285A73BC002A6E0E /* AppContext+Shared.swift */; }; 0E29385C285A8B30002A6E0E /* CoreContext+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E29385B285A8B30002A6E0E /* CoreContext+Shared.swift */; }; @@ -40,6 +47,7 @@ 0E3B7FDA27E51A0200C66F13 /* ProfileView+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */; }; 0E3CD47F280DA14B007075C0 /* AddProfileMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3CD47E280DA14B007075C0 /* AddProfileMenu.swift */; }; 0E3CD483280DAE92007075C0 /* ProfileView+MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */; }; + 0E3FC6862867A3F9009B851C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3FC6852867A3F9009B851C /* AppDelegate.swift */; }; 0E41BD9A286711C3006346B4 /* PassepartoutLauncherApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E41BD99286711C3006346B4 /* PassepartoutLauncherApp.swift */; }; 0E41BDA72867128A006346B4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E41BDA62867128A006346B4 /* AppDelegate.swift */; }; 0E41BDA928671356006346B4 /* PassepartoutLauncher.app in Embed Launcher */ = {isa = PBXBuildFile; fileRef = 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -54,6 +62,21 @@ 0E5349BE27C16A4500C71BB3 /* StyledPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349BD27C16A4500C71BB3 /* StyledPicker.swift */; }; 0E5349C627C176C200C71BB3 /* EndpointView+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349C527C176C200C71BB3 /* EndpointView+OpenVPN.swift */; }; 0E5349C827C176D100C71BB3 /* EndpointView+WireGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349C727C176D100C71BB3 /* EndpointView+WireGuard.swift */; }; + 0E5467F02867A4C300F74D1C /* PassepartoutMac.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */; }; + 0E5467F32867A54600F74D1C /* MacBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F22867A54600F74D1C /* MacBundle.swift */; }; + 0E5467F72867A57000F74D1C /* MacBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F62867A57000F74D1C /* MacBridge.swift */; }; + 0E5467F82867A57000F74D1C /* MacBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F62867A57000F74D1C /* MacBridge.swift */; }; + 0E5467FA2867AA0A00F74D1C /* MacBundleDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */; }; + 0E5467FE2867AC4900F74D1C /* ProcessTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */; }; + 0E5468002867AC9A00F74D1C /* MacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FF2867AC9900F74D1C /* MacUtils.swift */; }; + 0E5468012867AC9A00F74D1C /* MacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FF2867AC9900F74D1C /* MacUtils.swift */; }; + 0E5468042867AD3500F74D1C /* DefaultMacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */; }; + 0E5468062867AEC500F74D1C /* MacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468052867AEC500F74D1C /* MacMenu.swift */; }; + 0E5468072867AEC500F74D1C /* MacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468052867AEC500F74D1C /* MacMenu.swift */; }; + 0E5468092867AEF800F74D1C /* DefaultMacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */; }; + 0E546810286BAF3100F74D1C /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54680F286BAF3100F74D1C /* Item.swift */; }; + 0E546814286BAF3D00F74D1C /* TextItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54680D286B676E00F74D1C /* TextItem.swift */; }; + 0E54681F286CA53C00F74D1C /* SeparatorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */; }; 0E5683B927C2825D00EAF1CD /* DiagnosticsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */; }; 0E6059CB27FCC5DE003F4063 /* Flags.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E6059C827FCC5DD003F4063 /* Flags.xcassets */; }; 0E6059CC27FCC5DE003F4063 /* Providers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E6059C927FCC5DE003F4063 /* Providers.xcassets */; }; @@ -76,13 +99,39 @@ 0E92D7C627F103300033CB7B /* ProfileView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */; }; 0E92D7C927F1042A0033CB7B /* ProfileView+Extra.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */; }; 0E92D7F427F104B80033CB7B /* ProfileView+Diagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7F327F104B80033CB7B /* ProfileView+Diagnostics.swift */; }; + 0E96D2DE28704C3B005EFBCF /* TextItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */; }; + 0E96D2E028718E44005EFBCF /* VPNItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */; }; + 0E96D2E228718E78005EFBCF /* VPNItemGroup+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */; }; + 0E96D2E628718EF3005EFBCF /* ProfileItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */; }; + 0E96D2EC2871A0AD005EFBCF /* HostProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */; }; + 0E96D2EE2871B68C005EFBCF /* HostProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */; }; + 0E96D2F02871C563005EFBCF /* PassepartoutMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */; }; + 0E96D2F22871C5CA005EFBCF /* StaticSystemMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */; }; + 0E96D2F42871CDAD005EFBCF /* VisibilityItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */; }; + 0E96D2F62871D1FE005EFBCF /* VisibilityItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */; }; + 0E96D2F92871D874005EFBCF /* LightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */; }; + 0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */; }; + 0E96D2FD2871D964005EFBCF /* LightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */; }; + 0E96D2FE2871F688005EFBCF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E9E5AE227B44CF1008C95DA /* Localizable.strings */; }; + 0E96D2FF2871F68B005EFBCF /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075F27EC587900208AD9 /* SwiftGen+Strings.swift */; }; + 0E96D3002871F6C8005EFBCF /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; + 0E96D30228720067005EFBCF /* LightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30128720067005EFBCF /* LightVPNManager.swift */; }; + 0E96D30328720067005EFBCF /* LightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30128720067005EFBCF /* LightVPNManager.swift */; }; + 0E96D3052872010A005EFBCF /* DefaultLightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */; }; + 0E96D30B28720ED9005EFBCF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E96D30628720AA1005EFBCF /* Assets.xcassets */; }; + 0E96D30D287212FE005EFBCF /* LaunchOnLoginItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */; }; + 0E96D30F28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */; }; + 0E96D31128721855005EFBCF /* Constants+Mac.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D31028721855005EFBCF /* Constants+Mac.swift */; }; + 0E96D31428721FC3005EFBCF /* ObservableProcessTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */; }; 0E9AA978259F756A003FAFF1 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9AA977259F756A003FAFF1 /* PacketTunnelProvider.swift */; }; 0E9C233027F47032007D5FC7 /* IntentsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9C232F27F47032007D5FC7 /* IntentsManager.swift */; }; 0E9C233327F47E95007D5FC7 /* IntentDispatcher+Activities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9C233227F47E95007D5FC7 /* IntentDispatcher+Activities.swift */; }; 0E9C3B6F27FC573E00D0F02E /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E9C3B6E27FC573E00D0F02E /* CloudKit.framework */; }; 0E9E5AEF27B44CF1008C95DA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E9E5AE227B44CF1008C95DA /* Localizable.strings */; }; 0E9ED48127FD9BAE003B2316 /* CopySavingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9ED48027FD9BAE003B2316 /* CopySavingButton.swift */; }; + 0EA1D84728805EAE00F3CA48 /* Flags.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */; }; 0EA591162733DDDA0096F796 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 0EA591142733DDDA0096F796 /* Intents.intentdefinition */; }; + 0EA9030B287045F70087BC73 /* SystemMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA9030A287045F70087BC73 /* SystemMenu.swift */; }; 0EB17EA727D226B400D473B5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; 0EB17EA927D226C900D473B5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; 0EB17EAA27D226C900D473B5 /* Constants+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA527D2263700D473B5 /* Constants+App.swift */; }; @@ -100,6 +149,7 @@ 0EBC075D27EC529000208AD9 /* DebugLog+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075C27EC529000208AD9 /* DebugLog+Constants.swift */; }; 0EBC076027EC587900208AD9 /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075F27EC587900208AD9 /* SwiftGen+Strings.swift */; }; 0EBE880F281B18DE0090D9E6 /* ProfileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE880E281B18DE0090D9E6 /* ProfileRow.swift */; }; + 0ECB78E9285F5DE300B0E460 /* PassepartoutMac.bundle in Embed Plugins */ = {isa = PBXBuildFile; fileRef = 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 0ECB78EC2863A21600B0E460 /* PassepartoutLibrary in Frameworks */ = {isa = PBXBuildFile; productRef = 0ECB78EB2863A21600B0E460 /* PassepartoutLibrary */; }; 0ECF71EE27B6A99300CDB528 /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECF71ED27B6A99300CDB528 /* AccountView.swift */; }; 0ED1D6DC27DBA41700983466 /* DiagnosticsView+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */; }; @@ -133,6 +183,11 @@ 0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF2212E27E66F60001D0BD7 /* AddProfileView.swift */; }; 0EF2213127E674BD001D0BD7 /* AddProviderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */; }; 0EF8C5A828213C510053CE89 /* OrganizerView+Profiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF8C5A728213C510053CE89 /* OrganizerView+Profiles.swift */; }; + A3A7CC462878DC8300172D7D /* ProviderServerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */; }; + A3A7CC482878DC9F00172D7D /* ProviderServerItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */; }; + A3A7CC4A28790BD900172D7D /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC4928790BD900172D7D /* Theme.swift */; }; + A3A7CC56287D56E800172D7D /* ProviderLocationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */; }; + A3A7CC58287D576400172D7D /* ProviderLocationItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -148,32 +203,50 @@ containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0EDE8DBE20C86910004C739C; - remoteInfo = "PassepartoutTunnel-iOS"; + remoteInfo = PassepartoutTunnel; + }; + 0ECB78E6285F5CC400B0E460 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0E57F63020C83FC5008323CF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0ECB78D9285F52F700B0E460; + remoteInfo = PassepartoutMac; }; 0ECF71FB27B6DA6700CDB528 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ECF71F327B6D9CD00CDB528; - remoteInfo = "PassepartoutWireGuard-iOS"; + remoteInfo = PassepartoutWireGuard; }; 0ED2B36127D3C99100FD8EA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ED2B33E27D3C77800FD8EA9; - remoteInfo = "WireGuardTunnel-iOS"; + remoteInfo = WireGuardTunnel; }; 0ED2B36A27D3CAB100FD8EA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ECF71F327B6D9CD00CDB528; - remoteInfo = "WireGuardGo-iOS"; + remoteInfo = WireGuardGo; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 0E3152B7223F9EF500F61841 /* Embed Plugins */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 0ECB78E9285F5DE300B0E460 /* PassepartoutMac.bundle in Embed Plugins */, + ); + name = "Embed Plugins"; + runOnlyForDeploymentPostprocessing = 0; + }; 0E41BDA828671339006346B4 /* Embed Launcher */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -205,6 +278,10 @@ 0E0392762818732D00827C10 /* BuildProducts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildProducts.swift; sourceTree = ""; }; 0E039278281890B100827C10 /* AddHostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddHostView.swift; sourceTree = ""; }; 0E065F102813269500062CAF /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = ""; }; + 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemGroup.swift; sourceTree = ""; }; + 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PassepartoutMenu+StatusButton.swift"; sourceTree = ""; }; + 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightProviderManager.swift; sourceTree = ""; }; + 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightProviderManager.swift; sourceTree = ""; }; 0E09E35C2834172800BE1BAE /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 0E0BD27227B2EA2C00583AC5 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; 0E0BD27527B2EB2200583AC5 /* DonateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DonateView.swift; sourceTree = ""; }; @@ -213,6 +290,8 @@ 0E0C072C236087C800155AAC /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; 0E12BC8E27F62C8500B2F912 /* Validators.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Validators.swift; sourceTree = ""; }; 0E1C0A52238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderProfileItem.swift; sourceTree = ""; }; + 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderProfileItem+ViewModel.swift"; sourceTree = ""; }; 0E23B4A12298559800304C30 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; 0E293850285A70AC002A6E0E /* AppPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPreference.swift; sourceTree = ""; }; 0E293856285A73BC002A6E0E /* AppContext+Shared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppContext+Shared.swift"; sourceTree = ""; }; @@ -236,6 +315,8 @@ 0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Provider.swift"; sourceTree = ""; }; 0E3CD47E280DA14B007075C0 /* AddProfileMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProfileMenu.swift; sourceTree = ""; }; 0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+MainMenu.swift"; sourceTree = ""; }; + 0E3FC6842867A3BA009B851C /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = ""; }; + 0E3FC6852867A3F9009B851C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PassepartoutLauncher.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0E41BD99286711C3006346B4 /* PassepartoutLauncherApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PassepartoutLauncherApp.swift; sourceTree = ""; }; 0E41BDA2286711C6006346B4 /* Launcher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Launcher.entitlements; sourceTree = ""; }; @@ -251,6 +332,19 @@ 0E5349BD27C16A4500C71BB3 /* StyledPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StyledPicker.swift; sourceTree = ""; }; 0E5349C527C176C200C71BB3 /* EndpointView+OpenVPN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EndpointView+OpenVPN.swift"; sourceTree = ""; }; 0E5349C727C176D100C71BB3 /* EndpointView+WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EndpointView+WireGuard.swift"; sourceTree = ""; }; + 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassepartoutMac.swift; sourceTree = ""; }; + 0E5467F22867A54600F74D1C /* MacBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBundle.swift; sourceTree = ""; }; + 0E5467F62867A57000F74D1C /* MacBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBridge.swift; sourceTree = ""; }; + 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBundleDelegate.swift; sourceTree = ""; }; + 0E5467FC2867AC4900F74D1C /* ProcessTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessTransformer.h; sourceTree = ""; }; + 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProcessTransformer.m; sourceTree = ""; }; + 0E5467FF2867AC9900F74D1C /* MacUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacUtils.swift; sourceTree = ""; }; + 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultMacUtils.swift; sourceTree = ""; }; + 0E5468052867AEC500F74D1C /* MacMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacMenu.swift; sourceTree = ""; }; + 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultMacMenu.swift; sourceTree = ""; }; + 0E54680D286B676E00F74D1C /* TextItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextItem.swift; sourceTree = ""; }; + 0E54680F286BAF3100F74D1C /* Item.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = ""; }; + 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorItem.swift; sourceTree = ""; }; 0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticsView.swift; sourceTree = ""; }; 0E57F63820C83FC5008323CF /* Passepartout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Passepartout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0E57F64720C83FC7008323CF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -275,6 +369,25 @@ 0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Configuration.swift"; sourceTree = ""; }; 0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Extra.swift"; sourceTree = ""; }; 0E92D7F327F104B80033CB7B /* ProfileView+Diagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Diagnostics.swift"; sourceTree = ""; }; + 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TextItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNItemGroup.swift; sourceTree = ""; }; + 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VPNItemGroup+ViewModel.swift"; sourceTree = ""; }; + 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileItemGroup.swift; sourceTree = ""; }; + 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostProfileItem.swift; sourceTree = ""; }; + 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HostProfileItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PassepartoutMenu.swift; sourceTree = ""; }; + 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticSystemMenu.swift; sourceTree = ""; }; + 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisibilityItem.swift; sourceTree = ""; }; + 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VisibilityItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightProfileManager.swift; sourceTree = ""; }; + 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightProfileManager.swift; sourceTree = ""; }; + 0E96D30128720067005EFBCF /* LightVPNManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightVPNManager.swift; sourceTree = ""; }; + 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightVPNManager.swift; sourceTree = ""; }; + 0E96D30628720AA1005EFBCF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchOnLoginItem.swift; sourceTree = ""; }; + 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LaunchOnLoginItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D31028721855005EFBCF /* Constants+Mac.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Constants+Mac.swift"; sourceTree = ""; }; + 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObservableProcessTransformer.swift; sourceTree = ""; }; 0E9AA977259F756A003FAFF1 /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; 0E9C232F27F47032007D5FC7 /* IntentsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentsManager.swift; sourceTree = ""; }; 0E9C233227F47E95007D5FC7 /* IntentDispatcher+Activities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntentDispatcher+Activities.swift"; sourceTree = ""; }; @@ -292,6 +405,7 @@ 0E9E5AED27B44CF1008C95DA /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 0E9E5AEE27B44CF1008C95DA /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; 0E9ED48027FD9BAE003B2316 /* CopySavingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopySavingButton.swift; sourceTree = ""; }; + 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Flags.xcassets; sourceTree = ""; }; 0EA591122733DD4E0096F796 /* IntentDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntentDispatcher.swift; sourceTree = ""; }; 0EA591152733DDDA0096F796 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = ""; }; 0EA591182733DDF60096F796 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Intents.strings; sourceTree = ""; }; @@ -306,6 +420,7 @@ 0EA5912A2733DDFC0096F796 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Intents.strings; sourceTree = ""; }; 0EA5912C2733DDFC0096F796 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Intents.strings; sourceTree = ""; }; 0EA5912E2733DDFD0096F796 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Intents.strings; sourceTree = ""; }; + 0EA9030A287045F70087BC73 /* SystemMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMenu.swift; sourceTree = ""; }; 0EB17EA127D2263700D473B5 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 0EB17EA327D2263700D473B5 /* LocalProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalProduct.swift; sourceTree = ""; }; 0EB17EA527D2263700D473B5 /* Constants+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Constants+App.swift"; sourceTree = ""; }; @@ -330,6 +445,8 @@ 0EBE2FD72360F89600F0D5AB /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 0EBE2FD82360F89600F0D5AB /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; 0EBE880E281B18DE0090D9E6 /* ProfileRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileRow.swift; sourceTree = ""; }; + 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PassepartoutMac.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 0ECB78E1285F53ED00B0E460 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 0ECB78EA2861D1F300B0E460 /* PassepartoutLibrary */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = PassepartoutLibrary; sourceTree = ""; }; 0ECF71ED27B6A99300CDB528 /* AccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountView.swift; sourceTree = ""; }; 0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiagnosticsView+OpenVPN.swift"; sourceTree = ""; }; @@ -362,6 +479,11 @@ 0EF2212E27E66F60001D0BD7 /* AddProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProfileView.swift; sourceTree = ""; }; 0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProviderViewModel.swift; sourceTree = ""; }; 0EF8C5A728213C510053CE89 /* OrganizerView+Profiles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OrganizerView+Profiles.swift"; sourceTree = ""; }; + A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderServerItem.swift; sourceTree = ""; }; + A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderServerItem+ViewModel.swift"; sourceTree = ""; }; + A3A7CC4928790BD900172D7D /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderLocationItem.swift; sourceTree = ""; }; + A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderLocationItem+ViewModel.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -382,6 +504,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0ECB78D7285F52F700B0E460 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0ED2B34327D3C77800FD8EA9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -543,6 +672,77 @@ path = Extensions; sourceTree = ""; }; + 0E5467F12867A52B00F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D2FA2871D93B005EFBCF /* Models */, + 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */, + 0E5467F22867A54600F74D1C /* MacBundle.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E5467F52867A55F00F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D2F72871D868005EFBCF /* Models */, + 0E5467F62867A57000F74D1C /* MacBridge.swift */, + 0E5468052867AEC500F74D1C /* MacMenu.swift */, + 0E5467FF2867AC9900F74D1C /* MacUtils.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E5467FB2867AC4900F74D1C /* Reusable */ = { + isa = PBXGroup; + children = ( + 0E54680F286BAF3100F74D1C /* Item.swift */, + 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */, + 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */, + 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */, + 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */, + 0EA9030A287045F70087BC73 /* SystemMenu.swift */, + 0E54680D286B676E00F74D1C /* TextItem.swift */, + 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */, + 0E5467FC2867AC4900F74D1C /* ProcessTransformer.h */, + 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */, + ); + path = Reusable; + sourceTree = ""; + }; + 0E5468022867AD2100F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */, + 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E54680C286B675F00F74D1C /* Menu */ = { + isa = PBXGroup; + children = ( + 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */, + 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */, + 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */, + 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */, + 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */, + 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */, + 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */, + A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */, + A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */, + 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */, + 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */, + A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */, + A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */, + 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */, + 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */, + 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */, + 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */, + ); + path = Menu; + sourceTree = ""; + }; 0E57F62F20C83FC5008323CF = { isa = PBXGroup; children = ( @@ -561,6 +761,7 @@ 0EDE8DBF20C86910004C739C /* PassepartoutOpenVPNTunnel.appex */, 0ED2B34A27D3C77800FD8EA9 /* PassepartoutWireGuardTunnel.appex */, 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */, + 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */, ); name = Products; sourceTree = ""; @@ -575,12 +776,42 @@ path = InApp; sourceTree = ""; }; + 0E96D2F72871D868005EFBCF /* Models */ = { + isa = PBXGroup; + children = ( + 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */, + 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */, + 0E96D30128720067005EFBCF /* LightVPNManager.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0E96D2FA2871D93B005EFBCF /* Models */ = { + isa = PBXGroup; + children = ( + 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */, + 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */, + 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0E96D3122872185E005EFBCF /* Constants */ = { + isa = PBXGroup; + children = ( + 0E96D31028721855005EFBCF /* Constants+Mac.swift */, + A3A7CC4928790BD900172D7D /* Theme.swift */, + ); + path = Constants; + sourceTree = ""; + }; 0E9AA982259F7674003FAFF1 /* Passepartout */ = { isa = PBXGroup; children = ( 0E9AA983259F76C5003FAFF1 /* App */, 0ECB78D1285F4F4000B0E460 /* AppShared */, 0E41BD98286711C3006346B4 /* Launcher */, + 0ECB78DE285F536B00B0E460 /* Mac */, 0EDE8DC020C86910004C739C /* Tunnel */, 0EB17EA127D2263700D473B5 /* Constants.swift */, ); @@ -595,6 +826,7 @@ 0E49F6C927DB398100385834 /* Extensions */, 0E92781227E7CD530057BB81 /* InApp */, 0EA591112733DD4E0096F796 /* Intents */, + 0E5467F12867A52B00F74D1C /* Mac */, 0E2C171C27CB6307007E8488 /* Reusable */, 0E35C0AE280EF8A80071FA35 /* Views */, 0E6059CA27FCC5DE003F4063 /* Assets.xcassets */, @@ -605,6 +837,7 @@ 0E09E35C2834172800BE1BAE /* Credits.rtf */, 0E57F64720C83FC7008323CF /* Info.plist */, 0E0C072B236087A100155AAC /* InfoPlist.strings */, + 0E3FC6852867A3F9009B851C /* AppDelegate.swift */, 0E2A8D4727ADF87F00207D04 /* PassepartoutApp.swift */, ); path = App; @@ -627,6 +860,7 @@ 0ECB78D3285F4F9600B0E460 /* Constants */, 0E293859285A7489002A6E0E /* Context */, 0E34A2B827CAA8EA00C73B67 /* L10n */, + 0E5467F52867A55F00F74D1C /* Mac */, 0E9E5AE227B44CF1008C95DA /* Localizable.strings */, ); path = AppShared; @@ -651,6 +885,22 @@ path = Constants; sourceTree = ""; }; + 0ECB78DE285F536B00B0E460 /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D3122872185E005EFBCF /* Constants */, + 0E5468022867AD2100F74D1C /* Mac */, + 0E54680C286B675F00F74D1C /* Menu */, + 0E5467FB2867AC4900F74D1C /* Reusable */, + 0E96D30628720AA1005EFBCF /* Assets.xcassets */, + 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */, + 0ECB78E1285F53ED00B0E460 /* Info.plist */, + 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */, + 0E3FC6842867A3BA009B851C /* Bridging-Header.h */, + ); + path = Mac; + sourceTree = ""; + }; 0ED2B33C27D3C52900FD8EA9 /* OpenVPN */ = { isa = PBXGroup; children = ( @@ -676,14 +926,6 @@ path = Constants; sourceTree = ""; }; - 0ED7D630286733A1009F2F8F /* Constants */ = { - isa = PBXGroup; - children = ( - 0ED7D631286733AF009F2F8F /* Constants+Launcher.swift */, - ); - path = Constants; - sourceTree = ""; - }; 0EDE8DC020C86910004C739C /* Tunnel */ = { isa = PBXGroup; children = ( @@ -728,7 +970,7 @@ ); name = WireGuardGo; passBuildSettingsInEnvironment = 1; - productName = "PassepartoutWireGuard-iOS"; + productName = PassepartoutWireGuard; }; /* End PBXLegacyTarget section */ @@ -759,12 +1001,14 @@ 0E57F63520C83FC5008323CF /* Frameworks */, 0E57F63620C83FC5008323CF /* Resources */, 0E41BDA828671339006346B4 /* Embed Launcher */, + 0E3152B7223F9EF500F61841 /* Embed Plugins */, 0EB2B14B2733FB6F007705AB /* Embed App Extensions */, 0EBEF138274E4C7F00EAC689 /* Drop Extra Frameworks In Extensions */, ); buildRules = ( ); dependencies = ( + 0ECB78E7285F5CC400B0E460 /* PBXTargetDependency */, 0E41BDAB286713F6006346B4 /* PBXTargetDependency */, 0ECF71FC27B6DA6700CDB528 /* PBXTargetDependency */, 0EB2B14A2733FB6F007705AB /* PBXTargetDependency */, @@ -779,6 +1023,25 @@ productReference = 0E57F63820C83FC5008323CF /* Passepartout.app */; productType = "com.apple.product-type.application"; }; + 0ECB78D9285F52F700B0E460 /* PassepartoutMac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0ECB78DD285F52F700B0E460 /* Build configuration list for PBXNativeTarget "PassepartoutMac" */; + buildPhases = ( + 0E5467EF2867A4B100F74D1C /* Sources */, + 0ECB78D7285F52F700B0E460 /* Frameworks */, + 0ECB78D8285F52F700B0E460 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PassepartoutMac; + packageProductDependencies = ( + ); + productName = PassepartoutMac; + productReference = 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */; + productType = "com.apple.product-type.bundle"; + }; 0ED2B33E27D3C77800FD8EA9 /* WireGuardTunnel */ = { isa = PBXNativeTarget; buildConfigurationList = 0ED2B34727D3C77800FD8EA9 /* Build configuration list for PBXNativeTarget "WireGuardTunnel" */; @@ -796,7 +1059,7 @@ packageProductDependencies = ( 0ED2B36627D3C9A300FD8EA9 /* WireGuardAppExtension */, ); - productName = "Passepartout-iOS-Tunnel"; + productName = PassepartoutWireGuardTunnel; productReference = 0ED2B34A27D3C77800FD8EA9 /* PassepartoutWireGuardTunnel.appex */; productType = "com.apple.product-type.app-extension"; }; @@ -816,7 +1079,7 @@ packageProductDependencies = ( 0ED2B33827D3C49800FD8EA9 /* OpenVPNAppExtension */, ); - productName = "Passepartout-iOS-Tunnel"; + productName = PassepartoutOpenVPNTunnel; productReference = 0EDE8DBF20C86910004C739C /* PassepartoutOpenVPNTunnel.appex */; productType = "com.apple.product-type.app-extension"; }; @@ -851,6 +1114,10 @@ }; }; }; + 0ECB78D9285F52F700B0E460 = { + CreatedOnToolsVersion = 13.4; + LastSwiftMigration = 1340; + }; 0ECF71F327B6D9CD00CDB528 = { CreatedOnToolsVersion = 13.2; }; @@ -896,6 +1163,7 @@ projectRoot = ""; targets = ( 0E57F63720C83FC5008323CF /* Passepartout */, + 0ECB78D9285F52F700B0E460 /* PassepartoutMac */, 0E41BD96286711C3006346B4 /* PassepartoutLauncher */, 0EDE8DBE20C86910004C739C /* OpenVPNTunnel */, 0ECF71F327B6D9CD00CDB528 /* WireGuardGo */, @@ -926,6 +1194,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0ECB78D8285F52F700B0E460 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E96D30B28720ED9005EFBCF /* Assets.xcassets in Resources */, + 0EA1D84728805EAE00F3CA48 /* Flags.xcassets in Resources */, + 0E96D2FE2871F688005EFBCF /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0ED2B34627D3C77800FD8EA9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -994,6 +1272,52 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0E5467EF2867A4B100F74D1C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A3A7CC462878DC8300172D7D /* ProviderServerItem.swift in Sources */, + 0E96D31128721855005EFBCF /* Constants+Mac.swift in Sources */, + 0E96D3002871F6C8005EFBCF /* Constants.swift in Sources */, + 0E96D2E228718E78005EFBCF /* VPNItemGroup+ViewModel.swift in Sources */, + 0E96D2F02871C563005EFBCF /* PassepartoutMenu.swift in Sources */, + 0E96D2E028718E44005EFBCF /* VPNItemGroup.swift in Sources */, + 0E96D2F62871D1FE005EFBCF /* VisibilityItem+ViewModel.swift in Sources */, + 0E96D30F28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift in Sources */, + 0E5467F82867A57000F74D1C /* MacBridge.swift in Sources */, + 0E5468042867AD3500F74D1C /* DefaultMacUtils.swift in Sources */, + 0E5468092867AEF800F74D1C /* DefaultMacMenu.swift in Sources */, + 0E0838FB2877325A00A34EC0 /* LightProviderManager.swift in Sources */, + 0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */, + A3A7CC482878DC9F00172D7D /* ProviderServerItem+ViewModel.swift in Sources */, + 0E5467FE2867AC4900F74D1C /* ProcessTransformer.m in Sources */, + 0EA9030B287045F70087BC73 /* SystemMenu.swift in Sources */, + 0E96D2DE28704C3B005EFBCF /* TextItem+ViewModel.swift in Sources */, + 0E0838F22872C5FB00A34EC0 /* ItemGroup.swift in Sources */, + A3A7CC4A28790BD900172D7D /* Theme.swift in Sources */, + 0E0838F82874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift in Sources */, + 0E5468012867AC9A00F74D1C /* MacUtils.swift in Sources */, + 0E546810286BAF3100F74D1C /* Item.swift in Sources */, + A3A7CC56287D56E800172D7D /* ProviderLocationItem.swift in Sources */, + 0E96D30328720067005EFBCF /* LightVPNManager.swift in Sources */, + 0E96D2F42871CDAD005EFBCF /* VisibilityItem.swift in Sources */, + 0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */, + 0E5468072867AEC500F74D1C /* MacMenu.swift in Sources */, + 0E96D2EC2871A0AD005EFBCF /* HostProfileItem.swift in Sources */, + 0E96D2F22871C5CA005EFBCF /* StaticSystemMenu.swift in Sources */, + A3A7CC58287D576400172D7D /* ProviderLocationItem+ViewModel.swift in Sources */, + 0E5467F02867A4C300F74D1C /* PassepartoutMac.swift in Sources */, + 0E96D30D287212FE005EFBCF /* LaunchOnLoginItem.swift in Sources */, + 0E96D2F92871D874005EFBCF /* LightProfileManager.swift in Sources */, + 0E54681F286CA53C00F74D1C /* SeparatorItem.swift in Sources */, + 0E96D2E628718EF3005EFBCF /* ProfileItemGroup.swift in Sources */, + 0E96D31428721FC3005EFBCF /* ObservableProcessTransformer.swift in Sources */, + 0E96D2FF2871F68B005EFBCF /* SwiftGen+Strings.swift in Sources */, + 0E546814286BAF3D00F74D1C /* TextItem.swift in Sources */, + 0E96D2EE2871B68C005EFBCF /* HostProfileItem+ViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0E57F63420C83FC5008323CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1016,6 +1340,7 @@ 0EBC076027EC587900208AD9 /* SwiftGen+Strings.swift in Sources */, 0E0392772818732D00827C10 /* BuildProducts.swift in Sources */, 0E5683B927C2825D00EAF1CD /* DiagnosticsView.swift in Sources */, + 0E3FC6862867A3F9009B851C /* AppDelegate.swift in Sources */, 0E71ACFD27C1321A00F85C4B /* ActivityView.swift in Sources */, 0E44689627B051C300A14CE4 /* ProfileView.swift in Sources */, 0EDE02C227F61C79000FBE3C /* EditableTextList.swift in Sources */, @@ -1033,26 +1358,33 @@ 0EB17EAA27D226C900D473B5 /* Constants+App.swift in Sources */, 0E3B7FD627E5173A00C66F13 /* ProfileView+VPN.swift in Sources */, 0ED89C1E27DE3F8D008B36D6 /* IntentAddView.swift in Sources */, + 0E5468002867AC9A00F74D1C /* MacUtils.swift in Sources */, + 0E96D3052872010A005EFBCF /* DefaultLightVPNManager.swift in Sources */, 0EBE880F281B18DE0090D9E6 /* ProfileRow.swift in Sources */, 0ED30DCF27EA1EF80057D8A3 /* PaywallView+Beta.swift in Sources */, 0ECF71EE27B6A99300CDB528 /* AccountView.swift in Sources */, 0E71ACF727C107CA00F85C4B /* DebugLogView.swift in Sources */, 0EF0FAF927DD212C007EB181 /* IntentActivity.swift in Sources */, 0EBC075B27EC4FFF00208AD9 /* ReportIssueView.swift in Sources */, + 0E96D30228720067005EFBCF /* LightVPNManager.swift in Sources */, 0ED89C1727DE0E05008B36D6 /* IntentEditView.swift in Sources */, 0E70589B28377DC40075D1D2 /* VPNStatusText.swift in Sources */, 0E71ACE927C1055300F85C4B /* NetworkSettingsView.swift in Sources */, 0EB34BCA27C6A70200B126DA /* OnDemandView.swift in Sources */, + 0E0838FA2877325A00A34EC0 /* LightProviderManager.swift in Sources */, 0ED7D62F2867328A009F2F8F /* Constants+Library.swift in Sources */, + 0E5467FA2867AA0A00F74D1C /* MacBundleDelegate.swift in Sources */, 0E0BD27327B2EA2C00583AC5 /* MainView.swift in Sources */, 0EB17EBA27D2560300D473B5 /* PassepartoutProviders+Extensions.swift in Sources */, 0E3B7FDA27E51A0200C66F13 /* ProfileView+Provider.swift in Sources */, + 0E5468062867AEC500F74D1C /* MacMenu.swift in Sources */, 0E71ACE327C0F2E400F85C4B /* Providers+L10n.swift in Sources */, 0E71ACF127C1073800F85C4B /* ProviderLocationView.swift in Sources */, 0E2A8D4F27B04BBA00207D04 /* OrganizerView.swift in Sources */, 0E49F6BB27D7638300385834 /* EndpointAdvancedView+OpenVPN.swift in Sources */, 0E71ACEF27C106B500F85C4B /* ProviderPresetView.swift in Sources */, 0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */, + 0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */, 0EF0FAF627DD0211007EB181 /* PaywallView.swift in Sources */, 0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */, 0E5349BE27C16A4500C71BB3 /* StyledPicker.swift in Sources */, @@ -1061,12 +1393,15 @@ 0E021D9C284E68580077EF5D /* CoreContext.swift in Sources */, 0E34A2B627CAA8CC00C73B67 /* Core+L10n.swift in Sources */, 0E7577DF2817E22C00081CBE /* VPNToggle.swift in Sources */, + 0E5467F32867A54600F74D1C /* MacBundle.swift in Sources */, 0E6059CF27FCC618003F4063 /* SwiftGen+Assets.swift in Sources */, 0E2A8D4927ADF87F00207D04 /* PassepartoutApp.swift in Sources */, 0EBC075527EBC83800208AD9 /* MailComposerView.swift in Sources */, 0EF0FAF727DD159C007EB181 /* IntentDispatcher.swift in Sources */, 0E12BC8F27F62C8600B2F912 /* Validators.swift in Sources */, + 0E0838FD2877334300A34EC0 /* DefaultLightProviderManager.swift in Sources */, 0E039279281890B100827C10 /* AddHostView.swift in Sources */, + 0E5467F72867A57000F74D1C /* MacBridge.swift in Sources */, 0E9ED48127FD9BAE003B2316 /* CopySavingButton.swift in Sources */, 0EE11CD2280D8317003BE431 /* InfoMenu.swift in Sources */, 0E44689C27B11B5300A14CE4 /* AboutView.swift in Sources */, @@ -1087,6 +1422,7 @@ 0E065F112813269500062CAF /* WelcomeView.swift in Sources */, 0E2DE71F27DCD0290067B9E1 /* TunnelKit+L10n.swift in Sources */, 0E49F6BF27D764AF00385834 /* EndpointAdvancedView.swift in Sources */, + 0E96D2FD2871D964005EFBCF /* LightProfileManager.swift in Sources */, 0E0BD27627B2EB2200583AC5 /* DonateView.swift in Sources */, 0E2C171B27CB5A3B007E8488 /* GenericCreditsView.swift in Sources */, 0ED30DD227EA1F650057D8A3 /* PaywallView+Purchase.swift in Sources */, @@ -1134,6 +1470,12 @@ target = 0EDE8DBE20C86910004C739C /* OpenVPNTunnel */; targetProxy = 0EB2B1492733FB6F007705AB /* PBXContainerItemProxy */; }; + 0ECB78E7285F5CC400B0E460 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + platformFilter = maccatalyst; + target = 0ECB78D9285F52F700B0E460 /* PassepartoutMac */; + targetProxy = 0ECB78E6285F5CC400B0E460 /* PBXContainerItemProxy */; + }; 0ECF71FC27B6DA6700CDB528 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 0ECF71F327B6D9CD00CDB528 /* WireGuardGo */; @@ -1392,6 +1734,7 @@ 0E57F65620C83FC7008323CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1418,6 +1761,7 @@ 0E57F65720C83FC7008323CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1440,6 +1784,69 @@ }; name = Release; }; + 0ECB78DB285F52F700B0E460 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 3240; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = Passepartout/Mac/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_MAC_ID)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Passepartout/Mac/Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 0ECB78DC285F52F700B0E460 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 3240; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = Passepartout/Mac/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_MAC_ID)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Passepartout/Mac/Bridging-Header.h"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 0ECF71F527B6D9CD00CDB528 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1589,6 +1996,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 0ECB78DD285F52F700B0E460 /* Build configuration list for PBXNativeTarget "PassepartoutMac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0ECB78DB285F52F700B0E460 /* Debug */, + 0ECB78DC285F52F700B0E460 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 0ECF71F427B6D9CD00CDB528 /* Build configuration list for PBXLegacyTarget "WireGuardGo" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme b/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme new file mode 100644 index 00000000..f99fac6c --- /dev/null +++ b/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Passepartout/App/AppDelegate.swift b/Passepartout/App/AppDelegate.swift new file mode 100644 index 00000000..1237bcf9 --- /dev/null +++ b/Passepartout/App/AppDelegate.swift @@ -0,0 +1,39 @@ +// +// AppDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import UIKit + +class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject { + private let mac = MacBundle.shared + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + #if targetEnvironment(macCatalyst) + mac.configure() + mac.menu.install() + #endif + return true + } +} diff --git a/Passepartout/App/Constants/Constants+App.swift b/Passepartout/App/Constants/Constants+App.swift index f0249af2..b573e334 100644 --- a/Passepartout/App/Constants/Constants+App.swift +++ b/Passepartout/App/Constants/Constants+App.swift @@ -44,6 +44,10 @@ extension Constants { Bundle.main.isTestFlight }() } + + enum Plugins { + static let macBridgeName = "PassepartoutMac.bundle" + } enum InApp { static var appType: ProductManager.AppType { diff --git a/Passepartout/App/Context/AppPreference.swift b/Passepartout/App/Context/AppPreference.swift index 647c4bcf..6414d7bc 100644 --- a/Passepartout/App/Context/AppPreference.swift +++ b/Passepartout/App/Context/AppPreference.swift @@ -27,6 +27,8 @@ import Foundation import PassepartoutLibrary enum AppPreference: String, KeyStoreDomainLocation { + case launchesOnLogin // placeholder, hardcoded in PassepartoutMac + case isShowingFavorites case didHandleSubreddit diff --git a/Passepartout/App/Info.plist b/Passepartout/App/Info.plist index 325893cb..e2426b9c 100644 --- a/Passepartout/App/Info.plist +++ b/Passepartout/App/Info.plist @@ -61,6 +61,11 @@ UntrustCellularNetworkIntent UntrustCurrentNetworkIntent + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UIBackgroundModes remote-notification diff --git a/Passepartout/App/Intents/IntentDispatcher+Activities.swift b/Passepartout/App/Intents/IntentDispatcher+Activities.swift index 940a65cc..246fd49f 100644 --- a/Passepartout/App/Intents/IntentDispatcher+Activities.swift +++ b/Passepartout/App/Intents/IntentDispatcher+Activities.swift @@ -43,7 +43,7 @@ extension IntentDispatcher { Task { do { - try await vpnManager.connectWithActiveProfile() + try await vpnManager.connectWithActiveProfile(toServer: nil) } catch { pp_log.error("Unable to connect with active profile: \(error)") } diff --git a/Passepartout/App/Mac/MacBundle.swift b/Passepartout/App/Mac/MacBundle.swift new file mode 100644 index 00000000..bcd81809 --- /dev/null +++ b/Passepartout/App/Mac/MacBundle.swift @@ -0,0 +1,56 @@ +// +// MacBundle.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +class MacBundle { + static let shared = MacBundle() + + private var bridge: MacBridge! + + private lazy var bridgeDelegate = MacBundleDelegate(bundle: self) + + func configure() { + guard let bundleURL = Bundle.main.builtInPlugInsURL?.appendingPathComponent(Constants.Plugins.macBridgeName) else { + fatalError("Unable to find Mac bundle in plugins") + } + guard let bundle = Bundle(url: bundleURL) else { + fatalError("Unable to build Mac bundle") + } + guard let bridgeClass = bundle.principalClass as? MacBridge.Type else { + fatalError("Unable to find principal class in Mac bundle") + } + bridge = bridgeClass.init() + bridge.menu.delegate = bridgeDelegate + } + + var utils: MacUtils { + bridge.utils + } + + var menu: MacMenu { + bridge.menu + } +} diff --git a/Passepartout/App/Mac/MacBundleDelegate.swift b/Passepartout/App/Mac/MacBundleDelegate.swift new file mode 100644 index 00000000..c3cd9953 --- /dev/null +++ b/Passepartout/App/Mac/MacBundleDelegate.swift @@ -0,0 +1,46 @@ +// +// MacBundleDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +class MacBundleDelegate: MacMenuDelegate { + private weak var bundle: MacBundle? + + var profileManager: LightProfileManager { + DefaultLightProfileManager() + } + + var providerManager: LightProviderManager { + DefaultLightProviderManager() + } + + var vpnManager: LightVPNManager { + DefaultLightVPNManager() + } + + init(bundle: MacBundle?) { + self.bundle = bundle + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift b/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift new file mode 100644 index 00000000..fede6a7c --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift @@ -0,0 +1,106 @@ +// +// DefaultLightProfileManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import PassepartoutLibrary +import Combine + +class DefaultLightProfile: LightProfile { + let id: UUID + + let name: String + + let vpnProtocol: String + + let isActive: Bool + + let providerName: String? + + let providerServer: LightProviderServer? + + init(_ header: Profile.Header, vpnProtocol: String, isActive: Bool, providerServer: LightProviderServer?) { + id = header.id + name = header.name + self.vpnProtocol = vpnProtocol + self.isActive = isActive + providerName = header.providerName + self.providerServer = providerServer + } +} + +class DefaultLightProfileManager: LightProfileManager { + private let profileManager = Impl.ProfileManager.shared + + private let providerManager = Impl.ProviderManager.shared + + private var subscriptions: Set = [] + + weak var delegate: LightProfileManagerDelegate? + + init() { + profileManager.didUpdateProfiles + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateProfiles() + }.store(in: &subscriptions) + } + + var hasProfiles: Bool { + profileManager.hasProfiles + } + + var profiles: [LightProfile] { + profileManager.profiles + .sorted { + $0.header < $1.header + }.map { + let server: ProviderServer? + if let serverId = $0.providerServerId() { + server = providerManager.server(withId: serverId) + } else { + server = nil + } + return DefaultLightProfile( + $0.header, + vpnProtocol: $0.currentVPNProtocol.rawValue, + isActive: profileManager.isActiveProfile($0.id), + providerServer: server.map(DefaultLightProviderServer.init) + ) + } + } + + var activeProfileId: UUID? { + profileManager.activeProfileId + } + + var activeProfileName: String? { + guard let header = profileManager.headers.first(where: { + $0.id == profileManager.activeProfileId + }) else { + return nil + } + return header.name + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift new file mode 100644 index 00000000..ddf49ff4 --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift @@ -0,0 +1,114 @@ +// +// DefaultLightProviderManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/7/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import Combine +import PassepartoutLibrary + +class DefaultLightProviderCategory: LightProviderCategory { + let name: String + + var locations: [LightProviderLocation] + + init(_ category: ProviderCategory) { + name = category.name + locations = category.locations + .sorted() + .map(DefaultLightProviderLocation.init) + } +} + +class DefaultLightProviderLocation: LightProviderLocation { + let description: String + + let id: String + + let countryCode: String + + let servers: [LightProviderServer] + + init(_ location: ProviderLocation) { + description = location.localizedCountry + id = location.id + countryCode = location.countryCode + servers = location.servers? + .sorted() + .map(DefaultLightProviderServer.init) ?? [] + } +} + +class DefaultLightProviderServer: LightProviderServer { + let description: String + + let categoryName: String + + let locationId: String + + let serverId: String + + init(_ server: ProviderServer) { + description = server.localizedDescription + categoryName = server.categoryName + locationId = server.locationId + serverId = server.id + } +} + +class DefaultLightProviderManager: LightProviderManager { + private let providerManager = Impl.ProviderManager.shared + + private var subscriptions: Set = [] + + weak var delegate: LightProviderManagerDelegate? + + init() { + providerManager.didUpdateProviders + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateProviders() + }.store(in: &subscriptions) + } + + func categories(_ name: String, vpnProtocol: String) -> [LightProviderCategory] { + guard let vpnProtocolType = VPNProtocolType(rawValue: vpnProtocol) else { + fatalError("Unrecognized VPN protocol: \(vpnProtocol)") + } + return providerManager.categories(name, vpnProtocol: vpnProtocolType) + .map(DefaultLightProviderCategory.init) + } + + @MainActor + func downloadIfNeeded(_ name: String, vpnProtocol: String) { + guard let vpnProtocolType = VPNProtocolType(rawValue: vpnProtocol) else { + fatalError("Unrecognized VPN protocol: \(vpnProtocol)") + } + guard !providerManager.isAvailable(name, vpnProtocol: vpnProtocolType) else { + return + } + Task { + try await providerManager.fetchProviderPublisher(withName: name, vpnProtocol: vpnProtocolType, priority: .remoteThenBundle).async() + } + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift b/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift new file mode 100644 index 00000000..75d03db6 --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift @@ -0,0 +1,120 @@ +// +// DefaultLightVPNManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import PassepartoutLibrary +import Combine + +class DefaultLightVPNManager: LightVPNManager { + private let vpnManager = Impl.VPNManager.shared + + private var subscriptions: Set = [] + + var isEnabled: Bool { + vpnManager.currentState.isEnabled + } + + var vpnStatus: LightVPNStatus { + vpnManager.currentState.vpnStatus.asLightVPNStatus + } + + weak var delegate: LightVPNManagerDelegate? + + init() { + vpnManager.currentState.$isEnabled + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateState( + isEnabled: $0, + vpnStatus: self.vpnManager.currentState.vpnStatus.asLightVPNStatus + ) + }.store(in: &subscriptions) + + vpnManager.currentState.$vpnStatus + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateState( + isEnabled: self.vpnManager.currentState.isEnabled, + vpnStatus: $0.asLightVPNStatus + ) + }.store(in: &subscriptions) + } + + @MainActor + func connect(with profileId: UUID) { + Task { + try? await vpnManager.connect(with: profileId) + } + } + + @MainActor + func connect(with profileId: UUID, to serverId: String) { + Task { + try? await vpnManager.connect(with: profileId, toServer: serverId) + } + } + + @MainActor + func toggle() { + Task { + if !isEnabled { + try? await vpnManager.connectWithActiveProfile(toServer: nil) + } else { + await vpnManager.disable() + } + } + } + + @MainActor + func reconnect() { + Task { + if isEnabled { + await vpnManager.disable() + try? await Task.sleep(nanoseconds: 2 * NSEC_PER_SEC) + } + try? await vpnManager.connectWithActiveProfile(toServer: nil) + } + } +} + +private extension VPNStatus { + var asLightVPNStatus: LightVPNStatus { + switch self { + case .connected: + return .connected + + case .connecting: + return .connecting + + case .disconnected: + return .disconnected + + case .disconnecting: + return .disconnecting + } + } +} diff --git a/Passepartout/App/PassepartoutApp.swift b/Passepartout/App/PassepartoutApp.swift index e1c01216..c3dcb27a 100644 --- a/Passepartout/App/PassepartoutApp.swift +++ b/Passepartout/App/PassepartoutApp.swift @@ -28,6 +28,10 @@ import PassepartoutLibrary @main struct PassepartoutApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate + + @Environment(\.scenePhase) private var scenePhase + @SceneBuilder var body: some Scene { WindowGroup { MainView() @@ -40,6 +44,18 @@ struct PassepartoutApp: App { .onIntentActivity(IntentDispatcher.trustCurrentNetwork) .onIntentActivity(IntentDispatcher.untrustCellularNetwork) .onIntentActivity(IntentDispatcher.untrustCurrentNetwork) + }.onChange(of: scenePhase, perform: onScenePhase) + } + + private func onScenePhase(_ scenePhase: ScenePhase) { + switch scenePhase { + case .background: + #if targetEnvironment(macCatalyst) + MacBundle.shared.utils.sendAppToBackground() + #endif + + default: + break } } } diff --git a/Passepartout/App/swiftgen.yml b/Passepartout/App/swiftgen.yml deleted file mode 100644 index 3bad04bc..00000000 --- a/Passepartout/App/swiftgen.yml +++ /dev/null @@ -1,8 +0,0 @@ -xcassets: - inputs: - - Assets.xcassets - - Flags.xcassets - - Providers.xcassets - outputs: - - templateName: swift4 - output: Constants/SwiftGen+Assets.swift diff --git a/Passepartout/AppShared/Constants/SwiftGen+Strings.swift b/Passepartout/AppShared/Constants/SwiftGen+Strings.swift index b9678f40..dcdcbe05 100644 --- a/Passepartout/AppShared/Constants/SwiftGen+Strings.swift +++ b/Passepartout/AppShared/Constants/SwiftGen+Strings.swift @@ -435,16 +435,22 @@ internal enum L10n { internal static let cancel = L10n.tr("Localizable", "global.strings.cancel") /// Configuration internal static let configuration = L10n.tr("Localizable", "global.strings.configuration") + /// Connect + internal static let connect = L10n.tr("Localizable", "global.strings.connect") /// Default internal static let `default` = L10n.tr("Localizable", "global.strings.default") /// Delete internal static let delete = L10n.tr("Localizable", "global.strings.delete") /// Disabled internal static let disabled = L10n.tr("Localizable", "global.strings.disabled") + /// Disconnect + internal static let disconnect = L10n.tr("Localizable", "global.strings.disconnect") /// Domain internal static let domain = L10n.tr("Localizable", "global.strings.domain") /// Domains internal static let domains = L10n.tr("Localizable", "global.strings.domains") + /// Download + internal static let download = L10n.tr("Localizable", "global.strings.download") /// Duplicate internal static let duplicate = L10n.tr("Localizable", "global.strings.duplicate") /// Enabled @@ -453,6 +459,8 @@ internal enum L10n { internal static let encryption = L10n.tr("Localizable", "global.strings.encryption") /// Endpoint internal static let endpoint = L10n.tr("Localizable", "global.strings.endpoint") + /// Hide + internal static let hide = L10n.tr("Localizable", "global.strings.hide") /// Interface internal static let interface = L10n.tr("Localizable", "global.strings.interface") /// Keep-alive @@ -493,6 +501,8 @@ internal enum L10n { internal static let save = L10n.tr("Localizable", "global.strings.save") /// Servers internal static let servers = L10n.tr("Localizable", "global.strings.servers") + /// Show + internal static let show = L10n.tr("Localizable", "global.strings.show") /// Translations internal static let translations = L10n.tr("Localizable", "global.strings.translations") /// Uninstall @@ -540,63 +550,11 @@ internal enum L10n { } } internal enum System { - internal enum ActiveProfile { - internal enum Items { - internal enum Customize { - /// Customize... - internal static let title = L10n.tr("Localizable", "menu.system.active_profile.items.customize.title") - } - } - internal enum Messages { - /// No account configured - internal static let missingCredentials = L10n.tr("Localizable", "menu.system.active_profile.messages.missing_credentials") - } - internal enum Title { - /// No active profile - internal static let `none` = L10n.tr("Localizable", "menu.system.active_profile.title.none") - } - } - internal enum Organizer { - /// Organizer - internal static let title = L10n.tr("Localizable", "menu.system.organizer.title") - } - internal enum Preferences { - /// Preferences - internal static let title = L10n.tr("Localizable", "menu.system.preferences.title") - } internal enum Quit { /// Quit %@ internal static func title(_ p1: Any) -> String { return L10n.tr("Localizable", "menu.system.quit.title", String(describing: p1)) } - internal enum Messages { - /// The VPN, if enabled, will still run in the background. Do you want to quit? - internal static let confirm = L10n.tr("Localizable", "menu.system.quit.messages.confirm") - } - } - internal enum ShareGeneric { - /// Invite a friend - internal static let caption = L10n.tr("Localizable", "menu.system.share_generic.caption") - } - internal enum ShareTwitter { - /// Tweet about it! - internal static let caption = L10n.tr("Localizable", "menu.system.share_twitter.caption") - } - internal enum Show { - /// Show - internal static let title = L10n.tr("Localizable", "menu.system.show.title") - } - internal enum Support { - /// Make a donation - internal static let donate = L10n.tr("Localizable", "menu.system.support.donate") - /// Join community - internal static let joinCommunity = L10n.tr("Localizable", "menu.system.support.join_community") - /// Write a review - internal static let writeReview = L10n.tr("Localizable", "menu.system.support.write_review") - } - internal enum SwitchProfile { - /// Active profile - internal static let title = L10n.tr("Localizable", "menu.system.switch_profile.title") } } } diff --git a/Passepartout/AppShared/Mac/MacBridge.swift b/Passepartout/AppShared/Mac/MacBridge.swift new file mode 100644 index 00000000..54fdf79a --- /dev/null +++ b/Passepartout/AppShared/Mac/MacBridge.swift @@ -0,0 +1,35 @@ +// +// MacBridge.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(MacBridge) +public protocol MacBridge: NSObjectProtocol { + init() + + var utils: MacUtils { get } + + var menu: MacMenu { get } +} diff --git a/Passepartout/AppShared/Mac/MacMenu.swift b/Passepartout/AppShared/Mac/MacMenu.swift new file mode 100644 index 00000000..ba97bf2b --- /dev/null +++ b/Passepartout/AppShared/Mac/MacMenu.swift @@ -0,0 +1,42 @@ +// +// MacMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc +public protocol MacMenu { + var delegate: MacMenuDelegate? { get set } + + func install() +} + +@objc +public protocol MacMenuDelegate { + var profileManager: LightProfileManager { get } + + var providerManager: LightProviderManager { get } + + var vpnManager: LightVPNManager { get } +} diff --git a/Passepartout/AppShared/Mac/MacUtils.swift b/Passepartout/AppShared/Mac/MacUtils.swift new file mode 100644 index 00000000..3858f5e7 --- /dev/null +++ b/Passepartout/AppShared/Mac/MacUtils.swift @@ -0,0 +1,41 @@ +// +// MacUtils.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc +public protocol MacUtils { + var isForeground: Bool { get } + + func toggleForeground() + + func bringAppToForeground() + + func sendAppToBackground() +} + +@objc +public protocol MacUtilsDelegate { +} diff --git a/Passepartout/AppShared/Mac/Models/LightProfileManager.swift b/Passepartout/AppShared/Mac/Models/LightProfileManager.swift new file mode 100644 index 00000000..df0c26e7 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightProfileManager.swift @@ -0,0 +1,65 @@ +// +// LightProfileManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(LightProfile) +public protocol LightProfile { + var id: UUID { get } + + var name: String { get } + + var vpnProtocol: String { get } + + var isActive: Bool { get } + + var providerName: String? { get } + + var providerServer: LightProviderServer? { get } +} + +extension LightProfile { + public var isProvider: Bool { + providerName != nil + } +} + +@objc +public protocol LightProfileManager { + var hasProfiles: Bool { get } + + var profiles: [LightProfile] { get } + + var activeProfileId: UUID? { get } + + var activeProfileName: String? { get } + + var delegate: LightProfileManagerDelegate? { get set } +} + +@objc +public protocol LightProfileManagerDelegate { + func didUpdateProfiles() +} diff --git a/Passepartout/AppShared/Mac/Models/LightProviderManager.swift b/Passepartout/AppShared/Mac/Models/LightProviderManager.swift new file mode 100644 index 00000000..7889cbc4 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightProviderManager.swift @@ -0,0 +1,69 @@ +// +// DefaultLightProviderManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/7/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(LightProviderCategory) +public protocol LightProviderCategory { + var name: String { get } + + var locations: [LightProviderLocation] { get } +} + +@objc(LightProviderLocation) +public protocol LightProviderLocation { + var description: String { get } + + var id: String { get } + + var countryCode: String { get } + + var servers: [LightProviderServer] { get } +} + +@objc(LightProviderServer) +public protocol LightProviderServer { + var description: String { get } + + var categoryName: String { get } + + var locationId: String { get } + + var serverId: String { get } +} + +@objc +public protocol LightProviderManager { + var delegate: LightProviderManagerDelegate? { get set } + + func categories(_ name: String, vpnProtocol: String) -> [LightProviderCategory] + + func downloadIfNeeded(_ name: String, vpnProtocol: String) +} + +@objc +public protocol LightProviderManagerDelegate { + func didUpdateProviders() +} diff --git a/Passepartout/AppShared/Mac/Models/LightVPNManager.swift b/Passepartout/AppShared/Mac/Models/LightVPNManager.swift new file mode 100644 index 00000000..06635d48 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightVPNManager.swift @@ -0,0 +1,59 @@ +// +// LightVPNManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(LightVPNStatus) +public enum LightVPNStatus: Int { + case connecting + + case connected + + case disconnecting + + case disconnected +} + +@objc +public protocol LightVPNManager { + var isEnabled: Bool { get } + + var vpnStatus: LightVPNStatus { get } + + func connect(with profileId: UUID) + + func connect(with profileId: UUID, to serverId: String) + + func toggle() + + func reconnect() + + var delegate: LightVPNManagerDelegate? { get set } +} + +@objc +public protocol LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) +} diff --git a/Passepartout/AppShared/Menu/MenuBuilder.swift b/Passepartout/AppShared/Menu/MenuBuilder.swift new file mode 100644 index 00000000..5c4854b7 --- /dev/null +++ b/Passepartout/AppShared/Menu/MenuBuilder.swift @@ -0,0 +1,37 @@ +// +// MenuBuilder.swift +// Passepartout +// +// Created by Davide De Rosa on 6/24/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(MenuBuilder) +public protocol MenuBuilder: NSObjectProtocol { + weak var delegate: MenuDelegate? { get set } + + init() + + func sendAppToBackground() + + func buildMenu() +} diff --git a/Passepartout/AppShared/Menu/MenuDelegate.swift b/Passepartout/AppShared/Menu/MenuDelegate.swift new file mode 100644 index 00000000..47a9854b --- /dev/null +++ b/Passepartout/AppShared/Menu/MenuDelegate.swift @@ -0,0 +1,31 @@ +// +// MenuDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/24/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +@objc(MenuDelegate) +public protocol MenuDelegate { + func toggleForegroundClicked(isForeground: Bool) +} diff --git a/Passepartout/AppShared/en.lproj/Localizable.strings b/Passepartout/AppShared/en.lproj/Localizable.strings index 6bc39f4a..d2676b62 100644 --- a/Passepartout/AppShared/en.lproj/Localizable.strings +++ b/Passepartout/AppShared/en.lproj/Localizable.strings @@ -46,6 +46,11 @@ "global.strings.keepalive" = "Keep-alive"; "global.strings.advanced" = "Advanced"; "global.strings.translations" = "Translations"; +"global.strings.show" = "Show"; +"global.strings.hide" = "Hide"; +"global.strings.connect" = "Connect"; +"global.strings.disconnect" = "Disconnect"; +"global.strings.download" = "Download"; "global.messages.email_not_configured" = "No e-mail account is configured."; "global.messages.share" = "Passepartout is a user-friendly, open source OpenVPN / WireGuard client for iOS and macOS"; @@ -71,21 +76,20 @@ "menu.contextual.share_twitter" = "Tweet"; "menu.contextual.share_generic" = "Invite"; -"menu.system.show.title" = "Show"; -"menu.system.switch_profile.title" = "Active profile"; -"menu.system.active_profile.title.none" = "No active profile"; -"menu.system.active_profile.items.customize.title" = "Customize..."; -"menu.system.active_profile.messages.missing_credentials" = "No account configured"; -"menu.system.organizer.title" = "Organizer"; -"menu.system.preferences.title" = "Preferences"; -"menu.system.support.donate" = "Make a donation"; -"menu.system.support.join_community" = "Join community"; -"menu.system.support.write_review" = "Write a review"; +//"menu.system.switch_profile.title" = "Active profile"; +//"menu.system.active_profile.title.none" = "No active profile"; +//"menu.system.active_profile.items.customize.title" = "Customize..."; +//"menu.system.active_profile.messages.missing_credentials" = "No account configured"; +//"menu.system.organizer.title" = "Organizer"; +//"menu.system.preferences.title" = "Preferences"; +//"menu.system.support.donate" = "Make a donation"; +//"menu.system.support.join_community" = "Join community"; +//"menu.system.support.write_review" = "Write a review"; // "menu.system.support.translate" = "Offer to translate"; -"menu.system.share_twitter.caption" = "Tweet about it!"; -"menu.system.share_generic.caption" = "Invite a friend"; +//"menu.system.share_twitter.caption" = "Tweet about it!"; +//"menu.system.share_generic.caption" = "Invite a friend"; "menu.system.quit.title" = "Quit %@"; -"menu.system.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?"; +//"menu.system.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?"; /* MARK: TunnelKit */ diff --git a/Passepartout/AppShared/swiftgen.yml b/Passepartout/AppShared/swiftgen.yml deleted file mode 100644 index 0c509dce..00000000 --- a/Passepartout/AppShared/swiftgen.yml +++ /dev/null @@ -1,6 +0,0 @@ -strings: - inputs: - - en.lproj/Localizable.strings - outputs: - - templateName: structured-swift4 - output: Constants/SwiftGen+Strings.swift diff --git a/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json new file mode 100644 index 00000000..97c88e5b --- /dev/null +++ b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusActive@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png new file mode 100644 index 00000000..a85f0d47 Binary files /dev/null and b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png differ diff --git a/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json new file mode 100644 index 00000000..f71a4753 --- /dev/null +++ b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusPending@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png new file mode 100644 index 00000000..f6529f87 Binary files /dev/null and b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png differ diff --git a/Passepartout/Mac/Bridging-Header.h b/Passepartout/Mac/Bridging-Header.h new file mode 100644 index 00000000..086796a2 --- /dev/null +++ b/Passepartout/Mac/Bridging-Header.h @@ -0,0 +1,31 @@ +// +// Bridging-Header.h +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +#ifndef BridgingHeader_h +#define BridgingHeader_h + +#import "ProcessTransformer.h" + +#endif /* BridgingHeader_h */ diff --git a/Passepartout/Mac/Constants/Constants+Mac.swift b/Passepartout/Mac/Constants/Constants+Mac.swift new file mode 100644 index 00000000..414b71c6 --- /dev/null +++ b/Passepartout/Mac/Constants/Constants+Mac.swift @@ -0,0 +1,36 @@ +// +// Constants+Mac.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension Constants { + enum Mac { + private static var bundle: Bundle { + Bundle(for: PassepartoutMac.self) + } + + static let appLauncherId: String = bundleConfig("launcher_id", in: bundle) + } +} diff --git a/Passepartout/Mac/Constants/Theme.swift b/Passepartout/Mac/Constants/Theme.swift new file mode 100644 index 00000000..7afc97d4 --- /dev/null +++ b/Passepartout/Mac/Constants/Theme.swift @@ -0,0 +1,82 @@ +// +// Theme.swift +// Passepartout +// +// Created by Davide De Rosa on 7/9/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +private var bundle: Bundle { + Bundle(for: PassepartoutMenu.StatusButton.self) +} + +extension LightVPNStatus { + var localizedDescription: String { + switch self { + case .connecting: + return L10n.Tunnelkit.Vpn.connecting + + case .connected: + return L10n.Tunnelkit.Vpn.active + + case .disconnecting: + return L10n.Tunnelkit.Vpn.disconnecting + + case .disconnected: + return L10n.Tunnelkit.Vpn.inactive + } + } +} + +extension LightVPNStatus { + var image: NSImage { + let resourceName: String + switch self { + case .connected, .disconnected: + resourceName = "StatusActive" + + case .connecting, .disconnecting: + resourceName = "StatusPending" + } + guard let image = bundle.image(forResource: resourceName) else { + fatalError("Resource not found: \(resourceName)") + } + return image + } + + var imageAlpha: Double { + switch self { + case .disconnected: + return 0.5 + + default: + return 1.0 + } + } +} + +extension LightProviderLocation { + var nsImage: NSImage? { + bundle.image(forResource: "flags/\(countryCode.lowercased())") + } +} diff --git a/Passepartout/Mac/Flags.xcassets/Contents.json b/Passepartout/Mac/Flags.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/Contents.json new file mode 100644 index 00000000..6e965652 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json new file mode 100644 index 00000000..291487a4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ad@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png new file mode 100644 index 00000000..8e579814 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/Contents.json new file mode 100644 index 00000000..01e2f47e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ae@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/ae@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/ae@2x.png new file mode 100644 index 00000000..db2f5051 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ae.imageset/ae@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/af.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/af.imageset/Contents.json new file mode 100644 index 00000000..bc5b86c1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/af.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "af@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/af.imageset/af@2x.png b/Passepartout/Mac/Flags.xcassets/flags/af.imageset/af@2x.png new file mode 100644 index 00000000..4c978a46 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/af.imageset/af@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/Contents.json new file mode 100644 index 00000000..c5e39f9d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ag@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/ag@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/ag@2x.png new file mode 100644 index 00000000..f9cdd01f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ag.imageset/ag@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json new file mode 100644 index 00000000..830eac22 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ai@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png new file mode 100644 index 00000000..0730496f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/al.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/al.imageset/Contents.json new file mode 100644 index 00000000..21c104c5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/al.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "al@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/al.imageset/al@2x.png b/Passepartout/Mac/Flags.xcassets/flags/al.imageset/al@2x.png new file mode 100644 index 00000000..27d216d8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/al.imageset/al@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/am.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/am.imageset/Contents.json new file mode 100644 index 00000000..a343b516 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/am.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "am@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/am.imageset/am@2x.png b/Passepartout/Mac/Flags.xcassets/flags/am.imageset/am@2x.png new file mode 100644 index 00000000..5704f242 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/am.imageset/am@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json new file mode 100644 index 00000000..2b8a0d3c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ao@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png new file mode 100644 index 00000000..51386a8d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json new file mode 100644 index 00000000..0f99fc0a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "aq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png new file mode 100644 index 00000000..f3ef9dba Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json new file mode 100644 index 00000000..eec44f42 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ar@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png new file mode 100644 index 00000000..c43d67f3 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/as.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/as.imageset/Contents.json new file mode 100644 index 00000000..797c442e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/as.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "as@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/as.imageset/as@2x.png b/Passepartout/Mac/Flags.xcassets/flags/as.imageset/as@2x.png new file mode 100644 index 00000000..1691f39b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/as.imageset/as@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json new file mode 100644 index 00000000..9fd8cd25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "at@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png new file mode 100644 index 00000000..4a37c7e4 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json new file mode 100644 index 00000000..20b0f22c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "au@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png new file mode 100644 index 00000000..f5738884 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/Contents.json new file mode 100644 index 00000000..d2b09b08 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "aw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/aw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/aw@2x.png new file mode 100644 index 00000000..15258516 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/aw.imageset/aw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json new file mode 100644 index 00000000..363fe0c9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ax@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png new file mode 100644 index 00000000..f0284343 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json new file mode 100644 index 00000000..e7b6c564 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "az@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png new file mode 100644 index 00000000..95ef09b3 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/Contents.json new file mode 100644 index 00000000..be2ce9d5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ba@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/ba@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/ba@2x.png new file mode 100644 index 00000000..3cff7d5a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ba.imageset/ba@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/Contents.json new file mode 100644 index 00000000..a33e9727 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/bb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/bb@2x.png new file mode 100644 index 00000000..e4a4afc2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bb.imageset/bb@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/Contents.json new file mode 100644 index 00000000..ac3c0ea2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/bd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/bd@2x.png new file mode 100644 index 00000000..be8ec438 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bd.imageset/bd@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/be.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/be.imageset/Contents.json new file mode 100644 index 00000000..83bdbeb4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/be.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "be@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/be.imageset/be@2x.png b/Passepartout/Mac/Flags.xcassets/flags/be.imageset/be@2x.png new file mode 100644 index 00000000..a427e6cc Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/be.imageset/be@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json new file mode 100644 index 00000000..6f10e182 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png new file mode 100644 index 00000000..cc51e485 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json new file mode 100644 index 00000000..0d20c7a7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png new file mode 100644 index 00000000..3aaad404 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json new file mode 100644 index 00000000..e618bfa8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png new file mode 100644 index 00000000..8a9c1391 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json new file mode 100644 index 00000000..a3485c80 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png new file mode 100644 index 00000000..d13b54af Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/Contents.json new file mode 100644 index 00000000..5d91b738 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/bj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/bj@2x.png new file mode 100644 index 00000000..854cc8e5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bj.imageset/bj@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/Contents.json new file mode 100644 index 00000000..b5692198 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/bl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/bl@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bl.imageset/bl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json new file mode 100644 index 00000000..0e347c1e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png new file mode 100644 index 00000000..7d99c3ce Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json new file mode 100644 index 00000000..aada7843 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png new file mode 100644 index 00000000..07e87ec5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/Contents.json new file mode 100644 index 00000000..73f1bded --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/bo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/bo@2x.png new file mode 100644 index 00000000..e2136c1d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bo.imageset/bo@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json new file mode 100644 index 00000000..adbcea4a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png new file mode 100644 index 00000000..f1b7efd5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json new file mode 100644 index 00000000..91c2ab48 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "br@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png new file mode 100644 index 00000000..02e55517 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/Contents.json new file mode 100644 index 00000000..f6e48a64 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bs@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/bs@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/bs@2x.png new file mode 100644 index 00000000..5ce92477 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bs.imageset/bs@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json new file mode 100644 index 00000000..23283e2d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png new file mode 100644 index 00000000..b24dd866 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json new file mode 100644 index 00000000..d5bfaa7a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png new file mode 100644 index 00000000..311bc00f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/Contents.json new file mode 100644 index 00000000..54d59477 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/bw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/bw@2x.png new file mode 100644 index 00000000..66114c67 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bw.imageset/bw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/by.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/by.imageset/Contents.json new file mode 100644 index 00000000..65a27b5b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/by.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "by@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/by.imageset/by@2x.png b/Passepartout/Mac/Flags.xcassets/flags/by.imageset/by@2x.png new file mode 100644 index 00000000..3b09bc47 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/by.imageset/by@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json new file mode 100644 index 00000000..48af1f17 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png new file mode 100644 index 00000000..db05dfc9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json new file mode 100644 index 00000000..577ec34f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ca@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png new file mode 100644 index 00000000..5b3423c4 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json new file mode 100644 index 00000000..e23f3bc4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png new file mode 100644 index 00000000..70e652a1 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json new file mode 100644 index 00000000..609119fd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png new file mode 100644 index 00000000..228e8eda Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/Contents.json new file mode 100644 index 00000000..822342fe --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/cf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/cf@2x.png new file mode 100644 index 00000000..e741d126 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cf.imageset/cf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/Contents.json new file mode 100644 index 00000000..83fcddf3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/cg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/cg@2x.png new file mode 100644 index 00000000..0e219d6d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cg.imageset/cg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json new file mode 100644 index 00000000..ce4e6abb --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ch@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png new file mode 100644 index 00000000..811c7429 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json new file mode 100644 index 00000000..374ac228 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ci@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png new file mode 100644 index 00000000..54025ba9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json new file mode 100644 index 00000000..b8c0cd83 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ck@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png new file mode 100644 index 00000000..1543a11d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json new file mode 100644 index 00000000..6983bbae --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png new file mode 100644 index 00000000..636adc7d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/Contents.json new file mode 100644 index 00000000..f2efa855 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/cm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/cm@2x.png new file mode 100644 index 00000000..f4e50452 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cm.imageset/cm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/Contents.json new file mode 100644 index 00000000..7b7f0b37 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/cn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/cn@2x.png new file mode 100644 index 00000000..420508ba Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cn.imageset/cn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/co.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/co.imageset/Contents.json new file mode 100644 index 00000000..400bfb68 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/co.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "co@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/co.imageset/co@2x.png b/Passepartout/Mac/Flags.xcassets/flags/co.imageset/co@2x.png new file mode 100644 index 00000000..37e680f8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/co.imageset/co@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json new file mode 100644 index 00000000..cf24512d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png new file mode 100644 index 00000000..ec31ed89 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json new file mode 100644 index 00000000..65ae003d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png new file mode 100644 index 00000000..f259ed3f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/Contents.json new file mode 100644 index 00000000..ff76c27a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/cv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/cv@2x.png new file mode 100644 index 00000000..b78cb6c2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cv.imageset/cv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/Contents.json new file mode 100644 index 00000000..6d516fc5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/cw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/cw@2x.png new file mode 100644 index 00000000..975bd666 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cw.imageset/cw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json new file mode 100644 index 00000000..dbce070e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png new file mode 100644 index 00000000..cd59e2b7 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/Contents.json new file mode 100644 index 00000000..84e6f27e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cy@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/cy@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/cy@2x.png new file mode 100644 index 00000000..95d07a79 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cy.imageset/cy@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/Contents.json new file mode 100644 index 00000000..319fba50 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/cz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/cz@2x.png new file mode 100644 index 00000000..2a0b1d30 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/cz.imageset/cz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/de.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/de.imageset/Contents.json new file mode 100644 index 00000000..832555fc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/de.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "de@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/de.imageset/de@2x.png b/Passepartout/Mac/Flags.xcassets/flags/de.imageset/de@2x.png new file mode 100644 index 00000000..8a52fd2a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/de.imageset/de@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json new file mode 100644 index 00000000..c11611f4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "dj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png new file mode 100644 index 00000000..ba77415d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/Contents.json new file mode 100644 index 00000000..b373a294 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "dk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/dk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/dk@2x.png new file mode 100644 index 00000000..0b8f33d2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/dk.imageset/dk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/Contents.json new file mode 100644 index 00000000..68e3ae79 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "dm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/dm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/dm@2x.png new file mode 100644 index 00000000..159144d1 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/dm.imageset/dm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json new file mode 100644 index 00000000..8a9e002a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "do@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png new file mode 100644 index 00000000..02f536d7 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/Contents.json new file mode 100644 index 00000000..2d578d29 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "dz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/dz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/dz@2x.png new file mode 100644 index 00000000..7700ce96 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/dz.imageset/dz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/Contents.json new file mode 100644 index 00000000..3dc65b00 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ec@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/ec@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/ec@2x.png new file mode 100644 index 00000000..5659dada Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ec.imageset/ec@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json new file mode 100644 index 00000000..d19aab26 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ee@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png new file mode 100644 index 00000000..d5c8765b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json new file mode 100644 index 00000000..0702c3f2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "eg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png new file mode 100644 index 00000000..5768de7e Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json new file mode 100644 index 00000000..df44c3f1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "eh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png new file mode 100644 index 00000000..e7fffa44 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json new file mode 100644 index 00000000..5580db9f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "er@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png new file mode 100644 index 00000000..7297a1c5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/Contents.json new file mode 100644 index 00000000..5039ce6b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "es-ct@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/es-ct@2x.png b/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/es-ct@2x.png new file mode 100644 index 00000000..09abf984 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/es-ct@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json new file mode 100644 index 00000000..83bca3c3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "es@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png new file mode 100644 index 00000000..2fca4f35 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/et.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/et.imageset/Contents.json new file mode 100644 index 00000000..84041ee3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/et.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "et@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/et.imageset/et@2x.png b/Passepartout/Mac/Flags.xcassets/flags/et.imageset/et@2x.png new file mode 100644 index 00000000..c064bb8f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/et.imageset/et@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/Contents.json new file mode 100644 index 00000000..15937936 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "eu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/eu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/eu@2x.png new file mode 100644 index 00000000..e747620e Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/eu.imageset/eu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json new file mode 100644 index 00000000..126a96e3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png new file mode 100644 index 00000000..99ba758f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json new file mode 100644 index 00000000..ec8dcfbd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png new file mode 100644 index 00000000..d080bb48 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/Contents.json new file mode 100644 index 00000000..49ddf91d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/fk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/fk@2x.png new file mode 100644 index 00000000..fdea77ca Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fk.imageset/fk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/Contents.json new file mode 100644 index 00000000..711fc45d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/fm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/fm@2x.png new file mode 100644 index 00000000..2a4a7aad Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fm.imageset/fm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/Contents.json new file mode 100644 index 00000000..c694a7be --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/fo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/fo@2x.png new file mode 100644 index 00000000..bd58b6ba Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fo.imageset/fo@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json new file mode 100644 index 00000000..237f832c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json new file mode 100644 index 00000000..f3f1ab6a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ga@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png new file mode 100644 index 00000000..ede5241b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/Contents.json new file mode 100644 index 00000000..887d417b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-eng@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/gb-eng@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/gb-eng@2x.png new file mode 100644 index 00000000..ae4091ef Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/gb-eng@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json new file mode 100644 index 00000000..5607c743 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-nir@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png new file mode 100644 index 00000000..d4aa5abd Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json new file mode 100644 index 00000000..fb0244b8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-sct@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png new file mode 100644 index 00000000..cd5ae41d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/Contents.json new file mode 100644 index 00000000..9a58e585 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-wls@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/gb-wls@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/gb-wls@2x.png new file mode 100644 index 00000000..bcd336f0 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/gb-wls@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json new file mode 100644 index 00000000..16b9d117 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png new file mode 100644 index 00000000..097220d6 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/Contents.json new file mode 100644 index 00000000..b29ab3f8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/gd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/gd@2x.png new file mode 100644 index 00000000..1d66a587 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gd.imageset/gd@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/Contents.json new file mode 100644 index 00000000..c11cde6f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ge@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/ge@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/ge@2x.png new file mode 100644 index 00000000..80960fc5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ge.imageset/ge@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/Contents.json new file mode 100644 index 00000000..97e05702 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/gf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/gf@2x.png new file mode 100644 index 00000000..7b23bf42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gf.imageset/gf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/Contents.json new file mode 100644 index 00000000..523fad39 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/gg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/gg@2x.png new file mode 100644 index 00000000..146322fc Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gg.imageset/gg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/Contents.json new file mode 100644 index 00000000..625f6a58 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/gh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/gh@2x.png new file mode 100644 index 00000000..a6f7bc00 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gh.imageset/gh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json new file mode 100644 index 00000000..9fb481ba --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png new file mode 100644 index 00000000..949bd742 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/Contents.json new file mode 100644 index 00000000..ad6a7e97 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/gl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/gl@2x.png new file mode 100644 index 00000000..1172ffd8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gl.imageset/gl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/Contents.json new file mode 100644 index 00000000..f009740f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/gm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/gm@2x.png new file mode 100644 index 00000000..0b89cf17 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gm.imageset/gm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json new file mode 100644 index 00000000..da6fe232 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png new file mode 100644 index 00000000..88f1362d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json new file mode 100644 index 00000000..2f251e4c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json new file mode 100644 index 00000000..b387c51d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png new file mode 100644 index 00000000..49e1ff8a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json new file mode 100644 index 00000000..80cf15d1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png new file mode 100644 index 00000000..0c5e7314 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json new file mode 100644 index 00000000..6723e58f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gs@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png new file mode 100644 index 00000000..849c97ef Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json new file mode 100644 index 00000000..8f49e9e4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png new file mode 100644 index 00000000..787d9b3c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json new file mode 100644 index 00000000..570b9ab2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png new file mode 100644 index 00000000..a63dfc15 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/Contents.json new file mode 100644 index 00000000..f2d748db --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/gw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/gw@2x.png new file mode 100644 index 00000000..0c03edae Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gw.imageset/gw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/Contents.json new file mode 100644 index 00000000..c4bd007b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gy@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/gy@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/gy@2x.png new file mode 100644 index 00000000..0fce653a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/gy.imageset/gy@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json new file mode 100644 index 00000000..546021ba --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png new file mode 100644 index 00000000..975e73b0 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json new file mode 100644 index 00000000..22fd3a1c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png new file mode 100644 index 00000000..d2f46c4f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/Contents.json new file mode 100644 index 00000000..aa5cd944 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/hn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/hn@2x.png new file mode 100644 index 00000000..72ce68cf Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/hn.imageset/hn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json new file mode 100644 index 00000000..6070b5fc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png new file mode 100644 index 00000000..ad56e104 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/Contents.json new file mode 100644 index 00000000..407d62d7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ht@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/ht@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/ht@2x.png new file mode 100644 index 00000000..cf8db38b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ht.imageset/ht@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/Contents.json new file mode 100644 index 00000000..b42922a7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/hu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/hu@2x.png new file mode 100644 index 00000000..2d4f37cf Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/hu.imageset/hu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json new file mode 100644 index 00000000..02d9131b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "id@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png new file mode 100644 index 00000000..9a25f4e9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/Contents.json new file mode 100644 index 00000000..c0d09cf2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ie@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/ie@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/ie@2x.png new file mode 100644 index 00000000..cced55a6 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ie.imageset/ie@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json new file mode 100644 index 00000000..ec303b15 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "il@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png new file mode 100644 index 00000000..0ebeaf6b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json new file mode 100644 index 00000000..6e081ded --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "im@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png new file mode 100644 index 00000000..58773b5b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json new file mode 100644 index 00000000..cfa28fea --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "in@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png new file mode 100644 index 00000000..d6922841 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/io.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/io.imageset/Contents.json new file mode 100644 index 00000000..2b48759c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/io.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "io@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/io.imageset/io@2x.png b/Passepartout/Mac/Flags.xcassets/flags/io.imageset/io@2x.png new file mode 100644 index 00000000..31d2cd35 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/io.imageset/io@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/Contents.json new file mode 100644 index 00000000..13d0025f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "iq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/iq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/iq@2x.png new file mode 100644 index 00000000..191c4772 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/iq.imageset/iq@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/Contents.json new file mode 100644 index 00000000..1e9f19bc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ir@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/ir@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/ir@2x.png new file mode 100644 index 00000000..287c11ac Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ir.imageset/ir@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/is.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/is.imageset/Contents.json new file mode 100644 index 00000000..98078f82 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/is.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "is@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/is.imageset/is@2x.png b/Passepartout/Mac/Flags.xcassets/flags/is.imageset/is@2x.png new file mode 100644 index 00000000..2d24e403 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/is.imageset/is@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json new file mode 100644 index 00000000..76dd7de5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "it@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png new file mode 100644 index 00000000..4b090314 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/je.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/je.imageset/Contents.json new file mode 100644 index 00000000..9349a517 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/je.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "je@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/je.imageset/je@2x.png b/Passepartout/Mac/Flags.xcassets/flags/je.imageset/je@2x.png new file mode 100644 index 00000000..90ff19c0 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/je.imageset/je@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json new file mode 100644 index 00000000..26912164 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png new file mode 100644 index 00000000..276ecc6b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json new file mode 100644 index 00000000..dd61a74c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png new file mode 100644 index 00000000..5b01d9b5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json new file mode 100644 index 00000000..ebf9cd1f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png new file mode 100644 index 00000000..a5c91734 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/Contents.json new file mode 100644 index 00000000..f3070362 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ke@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/ke@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/ke@2x.png new file mode 100644 index 00000000..c8014827 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ke.imageset/ke@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json new file mode 100644 index 00000000..0fa9fcdd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png new file mode 100644 index 00000000..32144c44 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json new file mode 100644 index 00000000..c5156f03 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png new file mode 100644 index 00000000..5ab5cc81 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json new file mode 100644 index 00000000..b24f2b71 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ki@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png new file mode 100644 index 00000000..224aac6f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json new file mode 100644 index 00000000..11c0f8fc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "km@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png new file mode 100644 index 00000000..74e6ad27 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/Contents.json new file mode 100644 index 00000000..ba39c8e5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/kn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/kn@2x.png new file mode 100644 index 00000000..cdfc63e1 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kn.imageset/kn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/Contents.json new file mode 100644 index 00000000..abda6129 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/kp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/kp@2x.png new file mode 100644 index 00000000..8150ce68 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kp.imageset/kp@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json new file mode 100644 index 00000000..3ad10804 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png new file mode 100644 index 00000000..4f4b1c5d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json new file mode 100644 index 00000000..d5298c56 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png new file mode 100644 index 00000000..ce74c634 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json new file mode 100644 index 00000000..2ad7ec67 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ky@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png new file mode 100644 index 00000000..2fb44b3e Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json new file mode 100644 index 00000000..8f7a14d2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png new file mode 100644 index 00000000..bdeef063 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/la.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/la.imageset/Contents.json new file mode 100644 index 00000000..3e05a9b0 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/la.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "la@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/la.imageset/la@2x.png b/Passepartout/Mac/Flags.xcassets/flags/la.imageset/la@2x.png new file mode 100644 index 00000000..99ca1435 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/la.imageset/la@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json new file mode 100644 index 00000000..e5b0aafc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png new file mode 100644 index 00000000..22413f2d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json new file mode 100644 index 00000000..0fe73c16 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png new file mode 100644 index 00000000..c164b270 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json new file mode 100644 index 00000000..89d2181c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "li@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png new file mode 100644 index 00000000..c595cc33 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/Contents.json new file mode 100644 index 00000000..5a3945c5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/lk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/lk@2x.png new file mode 100644 index 00000000..eb1e736c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lk.imageset/lk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json new file mode 100644 index 00000000..1bf50039 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png new file mode 100644 index 00000000..75f6ad4c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/Contents.json new file mode 100644 index 00000000..39e10880 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ls@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/ls@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/ls@2x.png new file mode 100644 index 00000000..0e9daddb Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ls.imageset/ls@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json new file mode 100644 index 00000000..063614b5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png new file mode 100644 index 00000000..33af49e2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json new file mode 100644 index 00000000..9eee7733 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png new file mode 100644 index 00000000..0175718a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json new file mode 100644 index 00000000..cca347b6 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png new file mode 100644 index 00000000..5a4c14f4 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json new file mode 100644 index 00000000..dc2da8bd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ly@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png new file mode 100644 index 00000000..738e8ad3 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json new file mode 100644 index 00000000..c258aa71 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ma@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png new file mode 100644 index 00000000..0f8f7aaa Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/Contents.json new file mode 100644 index 00000000..e7d82f81 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/mc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/mc@2x.png new file mode 100644 index 00000000..2cabbfa7 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mc.imageset/mc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json new file mode 100644 index 00000000..27d9393f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "md@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png new file mode 100644 index 00000000..b5213fb1 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json new file mode 100644 index 00000000..87490178 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "me@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png new file mode 100644 index 00000000..a69b1967 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json new file mode 100644 index 00000000..5ba2415f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json new file mode 100644 index 00000000..cecc2130 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png new file mode 100644 index 00000000..04f7101f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json new file mode 100644 index 00000000..34eedca3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png new file mode 100644 index 00000000..f0439102 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json new file mode 100644 index 00000000..7d460ce4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png new file mode 100644 index 00000000..1b4ed77d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json new file mode 100644 index 00000000..1e84e5b8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ml@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png new file mode 100644 index 00000000..b8527fb9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/Contents.json new file mode 100644 index 00000000..1417939d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/mm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/mm@2x.png new file mode 100644 index 00000000..8bd69d74 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mm.imageset/mm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json new file mode 100644 index 00000000..adc20ace --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png new file mode 100644 index 00000000..684cecc9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json new file mode 100644 index 00000000..f46e7a3c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png new file mode 100644 index 00000000..afeb2408 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/Contents.json new file mode 100644 index 00000000..33be596f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/mp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/mp@2x.png new file mode 100644 index 00000000..4855abee Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mp.imageset/mp@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/Contents.json new file mode 100644 index 00000000..f1db0336 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/mq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/mq@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mq.imageset/mq@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json new file mode 100644 index 00000000..d955ef9a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png new file mode 100644 index 00000000..f26b0462 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json new file mode 100644 index 00000000..1bf53365 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ms@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png new file mode 100644 index 00000000..7f357cf3 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json new file mode 100644 index 00000000..a8e9f635 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png new file mode 100644 index 00000000..614eb1f8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/Contents.json new file mode 100644 index 00000000..6aabd582 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/mu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/mu@2x.png new file mode 100644 index 00000000..11eea966 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mu.imageset/mu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json new file mode 100644 index 00000000..a4662e69 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png new file mode 100644 index 00000000..7aa9d896 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json new file mode 100644 index 00000000..7e225184 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png new file mode 100644 index 00000000..19ceaeb5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json new file mode 100644 index 00000000..44505f70 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png new file mode 100644 index 00000000..b803ff29 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json new file mode 100644 index 00000000..ba9c8ee0 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "my@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png new file mode 100644 index 00000000..fd19357d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/Contents.json new file mode 100644 index 00000000..d1cbaf9b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/mz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/mz@2x.png new file mode 100644 index 00000000..7ff17b6c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/mz.imageset/mz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/na.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/na.imageset/Contents.json new file mode 100644 index 00000000..becb25f8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/na.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "na@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/na.imageset/na@2x.png b/Passepartout/Mac/Flags.xcassets/flags/na.imageset/na@2x.png new file mode 100644 index 00000000..5bb37a9a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/na.imageset/na@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/Contents.json new file mode 100644 index 00000000..16e1a096 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/nc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/nc@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nc.imageset/nc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json new file mode 100644 index 00000000..a8058c48 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ne@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png new file mode 100644 index 00000000..7ea65c48 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/Contents.json new file mode 100644 index 00000000..0c85f257 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/nf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/nf@2x.png new file mode 100644 index 00000000..45028b87 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nf.imageset/nf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json new file mode 100644 index 00000000..7dd8eace --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ng@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png new file mode 100644 index 00000000..31ca8c39 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/Contents.json new file mode 100644 index 00000000..7dddeb8f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ni@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/ni@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/ni@2x.png new file mode 100644 index 00000000..99f58ce5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ni.imageset/ni@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/Contents.json new file mode 100644 index 00000000..2e2c1f4c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/nl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/nl@2x.png new file mode 100644 index 00000000..8f28328d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nl.imageset/nl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json new file mode 100644 index 00000000..8b291610 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "no@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png new file mode 100644 index 00000000..6a5ef869 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json new file mode 100644 index 00000000..a9a83e8c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "np@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png new file mode 100644 index 00000000..9c0ee926 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/Contents.json new file mode 100644 index 00000000..c8369b7e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/nr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/nr@2x.png new file mode 100644 index 00000000..b442ef2b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nr.imageset/nr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/Contents.json new file mode 100644 index 00000000..2bb210fd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/nu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/nu@2x.png new file mode 100644 index 00000000..3cd2b842 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nu.imageset/nu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json new file mode 100644 index 00000000..202227c8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png new file mode 100644 index 00000000..2fe78b9d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/om.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/om.imageset/Contents.json new file mode 100644 index 00000000..3cb74402 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/om.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "om@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/om.imageset/om@2x.png b/Passepartout/Mac/Flags.xcassets/flags/om.imageset/om@2x.png new file mode 100644 index 00000000..56854450 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/om.imageset/om@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json new file mode 100644 index 00000000..ea909961 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pa@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png new file mode 100644 index 00000000..709b52da Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json new file mode 100644 index 00000000..88ec7f94 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pe@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png new file mode 100644 index 00000000..0ebaefb2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json new file mode 100644 index 00000000..3f023a1b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png new file mode 100644 index 00000000..399812c7 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/Contents.json new file mode 100644 index 00000000..f2464e62 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/pg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/pg@2x.png new file mode 100644 index 00000000..c67d49af Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pg.imageset/pg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json new file mode 100644 index 00000000..ba034aca --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ph@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png new file mode 100644 index 00000000..c7cbee37 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json new file mode 100644 index 00000000..23b6c2ff --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png new file mode 100644 index 00000000..ea2a0b38 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/Contents.json new file mode 100644 index 00000000..cf781267 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/pl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/pl@2x.png new file mode 100644 index 00000000..7e0873d5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pl.imageset/pl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/Contents.json new file mode 100644 index 00000000..9dd564ac --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/pm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/pm@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pm.imageset/pm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json new file mode 100644 index 00000000..028be044 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png new file mode 100644 index 00000000..f228eab5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/Contents.json new file mode 100644 index 00000000..dd18cc93 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/pr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/pr@2x.png new file mode 100644 index 00000000..a31a6a9f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pr.imageset/pr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json new file mode 100644 index 00000000..47c12871 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ps@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png new file mode 100644 index 00000000..1f98ed62 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json new file mode 100644 index 00000000..f8a6215d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png new file mode 100644 index 00000000..7f7ce200 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/Contents.json new file mode 100644 index 00000000..128b9dd2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/pw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/pw@2x.png new file mode 100644 index 00000000..26eee9fb Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/pw.imageset/pw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json new file mode 100644 index 00000000..f3d589da --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "py@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png new file mode 100644 index 00000000..84496f98 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/Contents.json new file mode 100644 index 00000000..686f4ba7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "qa@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/qa@2x.png b/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/qa@2x.png new file mode 100644 index 00000000..54120932 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/qa.imageset/qa@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json new file mode 100644 index 00000000..a4fddb25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "re@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json new file mode 100644 index 00000000..1186ea72 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ro@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png new file mode 100644 index 00000000..25ea7aaa Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json new file mode 100644 index 00000000..0b62367b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "rs@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png new file mode 100644 index 00000000..5ff02e46 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json new file mode 100644 index 00000000..4c9350a2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ru@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png new file mode 100644 index 00000000..a43e6c13 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json new file mode 100644 index 00000000..44ba894c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "rw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png new file mode 100644 index 00000000..0b1dae12 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/Contents.json new file mode 100644 index 00000000..bfe82493 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sa@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/sa@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/sa@2x.png new file mode 100644 index 00000000..88171bda Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sa.imageset/sa@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json new file mode 100644 index 00000000..d1888239 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png new file mode 100644 index 00000000..47310850 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json new file mode 100644 index 00000000..eaf45d61 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png new file mode 100644 index 00000000..02f57a8c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json new file mode 100644 index 00000000..dc61053c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png new file mode 100644 index 00000000..55f0018d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json new file mode 100644 index 00000000..d9528de1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "se@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png new file mode 100644 index 00000000..d2cc99a5 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json new file mode 100644 index 00000000..067ab513 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png new file mode 100644 index 00000000..baf21ab9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json new file mode 100644 index 00000000..d532530d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png new file mode 100644 index 00000000..02a74828 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json new file mode 100644 index 00000000..2bb2b08a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "si@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png new file mode 100644 index 00000000..cec61dc4 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/Contents.json new file mode 100644 index 00000000..c40e9428 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/sj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/sj@2x.png new file mode 100644 index 00000000..c926520d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sj.imageset/sj@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json new file mode 100644 index 00000000..9f534bd9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png new file mode 100644 index 00000000..5423c94b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json new file mode 100644 index 00000000..93bbb9d1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png new file mode 100644 index 00000000..d4351924 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json new file mode 100644 index 00000000..8f90da18 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png new file mode 100644 index 00000000..a4c6ee62 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json new file mode 100644 index 00000000..1dba2f1a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png new file mode 100644 index 00000000..7d9c580d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json new file mode 100644 index 00000000..1a597bb4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "so@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png new file mode 100644 index 00000000..c66ac725 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/Contents.json new file mode 100644 index 00000000..8cdcf7ab --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/sr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/sr@2x.png new file mode 100644 index 00000000..6c863350 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sr.imageset/sr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json new file mode 100644 index 00000000..37d1b6aa --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ss@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png new file mode 100644 index 00000000..b6f9e0b8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/st.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/st.imageset/Contents.json new file mode 100644 index 00000000..d9dec55f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/st.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "st@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/st.imageset/st@2x.png b/Passepartout/Mac/Flags.xcassets/flags/st.imageset/st@2x.png new file mode 100644 index 00000000..1b839638 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/st.imageset/st@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/Contents.json new file mode 100644 index 00000000..c3ac796a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/sv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/sv@2x.png new file mode 100644 index 00000000..a4848bd9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sv.imageset/sv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json new file mode 100644 index 00000000..66179e25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png new file mode 100644 index 00000000..be9c4a5b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json new file mode 100644 index 00000000..5322c28c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sy@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png new file mode 100644 index 00000000..3d2493d8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json new file mode 100644 index 00000000..1b13c37f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png new file mode 100644 index 00000000..c46582ac Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json new file mode 100644 index 00000000..5d40e955 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png new file mode 100644 index 00000000..68df16ca Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/td.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/td.imageset/Contents.json new file mode 100644 index 00000000..7d920831 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/td.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "td@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/td.imageset/td@2x.png b/Passepartout/Mac/Flags.xcassets/flags/td.imageset/td@2x.png new file mode 100644 index 00000000..45dee310 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/td.imageset/td@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json new file mode 100644 index 00000000..a8ed7133 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png new file mode 100644 index 00000000..3b7dc74e Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json new file mode 100644 index 00000000..0373817f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png new file mode 100644 index 00000000..09f45643 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/th.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/th.imageset/Contents.json new file mode 100644 index 00000000..6e324e79 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/th.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "th@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/th.imageset/th@2x.png b/Passepartout/Mac/Flags.xcassets/flags/th.imageset/th@2x.png new file mode 100644 index 00000000..d739e0cd Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/th.imageset/th@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/Contents.json new file mode 100644 index 00000000..86e338a3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/tj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/tj@2x.png new file mode 100644 index 00000000..91341dd2 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tj.imageset/tj@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/Contents.json new file mode 100644 index 00000000..f3d45040 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/tk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/tk@2x.png new file mode 100644 index 00000000..a2680894 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tk.imageset/tk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json new file mode 100644 index 00000000..7221cbe8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png new file mode 100644 index 00000000..174403f9 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json new file mode 100644 index 00000000..52dc9e1d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png new file mode 100644 index 00000000..634da525 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json new file mode 100644 index 00000000..b057ea0f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png new file mode 100644 index 00000000..8d5ca25a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/to.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/to.imageset/Contents.json new file mode 100644 index 00000000..bce588d0 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/to.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "to@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/to.imageset/to@2x.png b/Passepartout/Mac/Flags.xcassets/flags/to.imageset/to@2x.png new file mode 100644 index 00000000..7a7bae06 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/to.imageset/to@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/Contents.json new file mode 100644 index 00000000..a35f8800 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/tr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/tr@2x.png new file mode 100644 index 00000000..77e74c1c Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tr.imageset/tr@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json new file mode 100644 index 00000000..37f9647a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png new file mode 100644 index 00000000..dccefb1d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json new file mode 100644 index 00000000..0f349490 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png new file mode 100644 index 00000000..20c6a43d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json new file mode 100644 index 00000000..dbeea730 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png new file mode 100644 index 00000000..e67b370a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/Contents.json new file mode 100644 index 00000000..71b555a1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/tz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/tz@2x.png new file mode 100644 index 00000000..39a1615e Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/tz.imageset/tz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json new file mode 100644 index 00000000..0a28ffcc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ua@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png new file mode 100644 index 00000000..776abba8 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/Contents.json new file mode 100644 index 00000000..6b18c155 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ug@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/ug@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/ug@2x.png new file mode 100644 index 00000000..1643347d Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ug.imageset/ug@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json new file mode 100644 index 00000000..63b1ebe8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "um@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png new file mode 100644 index 00000000..e286037a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/un.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/un.imageset/Contents.json new file mode 100644 index 00000000..337b3868 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/un.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "un@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/un.imageset/un@2x.png b/Passepartout/Mac/Flags.xcassets/flags/un.imageset/un@2x.png new file mode 100644 index 00000000..c4697d14 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/un.imageset/un@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json new file mode 100644 index 00000000..f5d86335 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "us@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png new file mode 100644 index 00000000..6f7141cd Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/Contents.json new file mode 100644 index 00000000..5efa8ea7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "uy@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/uy@2x.png b/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/uy@2x.png new file mode 100644 index 00000000..ef2c2ead Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/uy.imageset/uy@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json new file mode 100644 index 00000000..c3f9e3d9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "uz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png new file mode 100644 index 00000000..bc35ebeb Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json new file mode 100644 index 00000000..e525c571 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "va@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png new file mode 100644 index 00000000..8c677b45 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/Contents.json new file mode 100644 index 00000000..137a984f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/vc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/vc@2x.png new file mode 100644 index 00000000..c4ef8c8a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/vc.imageset/vc@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json new file mode 100644 index 00000000..0fbe4538 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ve@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png new file mode 100644 index 00000000..18053a4a Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json new file mode 100644 index 00000000..d42c1937 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png new file mode 100644 index 00000000..0fc07117 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/Contents.json new file mode 100644 index 00000000..f3d5a8e8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/vi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/vi@2x.png new file mode 100644 index 00000000..6f3bd1bc Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/vi.imageset/vi@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/Contents.json new file mode 100644 index 00000000..1553850b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/vn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/vn@2x.png new file mode 100644 index 00000000..eea6e770 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/vn.imageset/vn@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json new file mode 100644 index 00000000..09ecf5b2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png new file mode 100644 index 00000000..5c1ec83f Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json new file mode 100644 index 00000000..ce046b57 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "wf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json new file mode 100644 index 00000000..74713980 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ws@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png new file mode 100644 index 00000000..07840dd7 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/Contents.json new file mode 100644 index 00000000..3e5bc3e2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "xk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/xk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/xk@2x.png new file mode 100644 index 00000000..a66e0ac1 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/xk.imageset/xk@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json new file mode 100644 index 00000000..7c10e9c8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ye@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png new file mode 100644 index 00000000..0978749b Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/Contents.json new file mode 100644 index 00000000..43cd5546 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "yt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/yt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/yt@2x.png new file mode 100644 index 00000000..62d74b42 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/yt.imageset/yt@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json new file mode 100644 index 00000000..362c18e6 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "za@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png new file mode 100644 index 00000000..5d2bb1b4 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/Contents.json new file mode 100644 index 00000000..026f3f54 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "zm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/zm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/zm@2x.png new file mode 100644 index 00000000..8f314bb0 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/zm.imageset/zm@2x.png differ diff --git a/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json new file mode 100644 index 00000000..6af8e8a4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "zw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png new file mode 100644 index 00000000..1029f472 Binary files /dev/null and b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png differ diff --git a/Passepartout/Mac/Info.plist b/Passepartout/Mac/Info.plist new file mode 100644 index 00000000..34a290cc --- /dev/null +++ b/Passepartout/Mac/Info.plist @@ -0,0 +1,19 @@ + + + + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleShortVersionString + 2.0.0 + CFBundleVersion + 3240 + NSPrincipalClass + $(PRODUCT_MODULE_NAME).PassepartoutMac + com.algoritmico.Passepartout.config + + launcher_id + $(CFG_LAUNCHER_ID) + + + diff --git a/Passepartout/Mac/Mac/DefaultMacMenu.swift b/Passepartout/Mac/Mac/DefaultMacMenu.swift new file mode 100644 index 00000000..150a294a --- /dev/null +++ b/Passepartout/Mac/Mac/DefaultMacMenu.swift @@ -0,0 +1,41 @@ +// +// DefaultMacMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +class DefaultMacMenu: MacMenu { + weak var delegate: MacMenuDelegate? + + private lazy var menu: PassepartoutMenu = { + guard let delegate = delegate else { + fatalError("Must set MacMenu.delegate") + } + return PassepartoutMenu(macMenuDelegate: delegate) + }() + + func install() { + menu.install() + } +} diff --git a/Passepartout/Mac/Mac/DefaultMacUtils.swift b/Passepartout/Mac/Mac/DefaultMacUtils.swift new file mode 100644 index 00000000..71c92fdb --- /dev/null +++ b/Passepartout/Mac/Mac/DefaultMacUtils.swift @@ -0,0 +1,46 @@ +// +// DefaultMacUtils.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +class DefaultMacUtils: MacUtils { + private let transformer = ObservableProcessTransformer.shared + + var isForeground: Bool { + transformer.isForeground + } + + func toggleForeground() { + transformer.toggleForeground() + } + + func bringAppToForeground() { + transformer.bringToForeground() + } + + func sendAppToBackground() { + transformer.sendToBackground() + } +} diff --git a/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift b/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift new file mode 100644 index 00000000..b004cc6b --- /dev/null +++ b/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift @@ -0,0 +1,43 @@ +// +// HostProfileItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension HostProfileItem { + class ViewModel { + let profile: LightProfile + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, vpnManager: LightVPNManager) { + self.profile = profile + self.vpnManager = vpnManager + } + + @objc func connectTo() { + vpnManager.connect(with: profile.id) + } + } +} diff --git a/Passepartout/Mac/Menu/HostProfileItem.swift b/Passepartout/Mac/Menu/HostProfileItem.swift new file mode 100644 index 00000000..2e5c5599 --- /dev/null +++ b/Passepartout/Mac/Menu/HostProfileItem.swift @@ -0,0 +1,62 @@ +// +// HostProfileItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct HostProfileItem: Item { + private let viewModel: ViewModel + + init(_ profile: LightProfile, vpnManager: LightVPNManager) { + viewModel = ViewModel(profile, vpnManager: vpnManager) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.profile.name, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.profile.isActive ? .on : .off + item.submenu = submenu() + item.representedObject = viewModel + return item + } + + private func submenu() -> NSMenu { + let menu = NSMenu() + + let item = NSMenuItem( + title: L10n.Global.Strings.connect, + action: #selector(viewModel.connectTo), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + menu.addItem(item) + return menu + } +} diff --git a/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift b/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift new file mode 100644 index 00000000..578d6390 --- /dev/null +++ b/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift @@ -0,0 +1,77 @@ +// +// LaunchOnLoginItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import Combine +import ServiceManagement + +extension LaunchOnLoginItem { + class ViewModel: ObservableObject { + + // XXX: hardcoded from AppPreference + private let launchesOnLoginKey = "Passepartout.App.launchesOnLogin" + + let title: String + + var launchesOnLogin: Bool { + get { + persistentlyLaunchesOnLogin + } + set { + guard SMLoginItemSetEnabled(Constants.Mac.appLauncherId as CFString, newValue) else { + return + } + persistentlyLaunchesOnLogin = newValue + objectWillChange.send() + } + } + + private var persistentlyLaunchesOnLogin: Bool { + get { + UserDefaults.standard.bool(forKey: launchesOnLoginKey) + } + set { + UserDefaults.standard.set(newValue, forKey: launchesOnLoginKey) + } + } + + private var subscriptions: Set = [] + + init(title: String) { + self.title = title + } + + @objc func toggleLaunchesOnLogin() { + launchesOnLogin.toggle() + } + + func subscribe(_ block: @escaping (Bool) -> Void) { + objectWillChange + .sink { + block(self.launchesOnLogin) + }.store(in: &subscriptions) + } + } +} diff --git a/Passepartout/Mac/Menu/LaunchOnLoginItem.swift b/Passepartout/Mac/Menu/LaunchOnLoginItem.swift new file mode 100644 index 00000000..aa3993a7 --- /dev/null +++ b/Passepartout/Mac/Menu/LaunchOnLoginItem.swift @@ -0,0 +1,55 @@ +// +// LaunchOnLoginItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct LaunchOnLoginItem: Item { + private let viewModel: ViewModel + + init(_ title: String) { + viewModel = ViewModel(title: title) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title, + action: #selector(viewModel.toggleLaunchesOnLogin), + keyEquivalent: "" + ) + item.target = viewModel + item.state = state + item.representedObject = viewModel + + viewModel.subscribe { _ in + item.state = state + } + return item + } + + private var state: NSControl.StateValue { + viewModel.launchesOnLogin ? .on : .off + } +} diff --git a/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift b/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift new file mode 100644 index 00000000..cbe2c6ef --- /dev/null +++ b/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift @@ -0,0 +1,87 @@ +// +// PassepartoutMenu+StatusButton.swift +// Passepartout +// +// Created by Davide De Rosa on 7/5/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +extension PassepartoutMenu { + class StatusButton { + private lazy var statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) + + private lazy var statusButton: NSStatusBarButton = { + guard let statusButton = statusItem.button else { + fatalError("Missing status item button?") + } + return statusButton + }() + + private let profileManager: LightProfileManager + + private let vpnManager: LightVPNManager + + init(profileManager: LightProfileManager, vpnManager: LightVPNManager) { + self.profileManager = profileManager + self.vpnManager = vpnManager + + vpnManager.delegate = self + setStatus(vpnManager.vpnStatus) + } + + func install(systemMenu: SystemMenu) { + statusItem.menu = systemMenu.asMenu + } + } +} + +extension PassepartoutMenu.StatusButton: LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) { + guard isEnabled else { + setStatus(.disconnected) + return + } + setStatus(vpnStatus) + } + + private func setStatus(_ vpnStatus: LightVPNStatus) { + statusButton.setStatus(vpnStatus, withActiveProfileName: profileManager.activeProfileName) + } +} + +private extension NSStatusBarButton { + func setStatus(_ vpnStatus: LightVPNStatus, withActiveProfileName activeProfileName: String?) { + image = vpnStatus.image + alphaValue = vpnStatus.imageAlpha + + guard let activeProfileName = activeProfileName else { + toolTip = nil + return + } + toolTip = [ + Constants.Global.appName, + activeProfileName, + vpnStatus.localizedDescription + ].joined(separator: "\n") + } +} diff --git a/Passepartout/Mac/Menu/PassepartoutMenu.swift b/Passepartout/Mac/Menu/PassepartoutMenu.swift new file mode 100644 index 00000000..4e02f750 --- /dev/null +++ b/Passepartout/Mac/Menu/PassepartoutMenu.swift @@ -0,0 +1,117 @@ +// +// PassepartoutMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +class PassepartoutMenu { + private let macMenuDelegate: MacMenuDelegate + + private let profileManager: LightProfileManager + + private let providerManager: LightProviderManager + + private let statusButton: StatusButton + + init(macMenuDelegate: MacMenuDelegate) { + self.macMenuDelegate = macMenuDelegate + profileManager = macMenuDelegate.profileManager + providerManager = macMenuDelegate.providerManager + statusButton = StatusButton( + profileManager: profileManager, + vpnManager: macMenuDelegate.vpnManager + ) + + profileManager.delegate = self + providerManager.delegate = self + + } + + func install() { + statusButton.install(systemMenu: StaticSystemMenu(body)) + } + + private var body: [ItemGroup] { + var children: [ItemGroup] = [] + + children.append(contentsOf: [ + VisibilityItem { + $0 ? L10n.Global.Strings.hide : L10n.Global.Strings.show + }, + LaunchOnLoginItem(L10n.Preferences.Items.LaunchesOnLogin.caption), + ] as [ItemGroup]) + + if profileManager.hasProfiles { + children.append(contentsOf: [ + SeparatorItem(), + ProfileItemGroup( + profileManager: macMenuDelegate.profileManager, + providerManager: macMenuDelegate.providerManager, + vpnManager: macMenuDelegate.vpnManager + ) + ] as [ItemGroup]) + } + + if let _ = profileManager.activeProfileId { + children.append(contentsOf: [ + SeparatorItem(), + VPNItemGroup( + vpnManager: macMenuDelegate.vpnManager + ) { + $0 ? L10n.Profile.Items.Vpn.TurnOff.caption : L10n.Profile.Items.Vpn.TurnOn.caption + } reconnectTitleBlock: { + L10n.Global.Strings.reconnect + }, + ] as [ItemGroup]) + } + + children.append(contentsOf: [ + SeparatorItem(), +// TextItem(L10n.Menu.All.About.title(Constants.Global.appName)) { +// +// // this does not work when app is in background +// NSApp.orderFrontStandardAboutPanel(nil) +// NSApp.activate(ignoringOtherApps: true) +// }, + TextItem(L10n.Menu.System.Quit.title(Constants.Global.appName), key: "q") { + NSApp.terminate(nil) + } + ] as [ItemGroup]) + + return children + } +} + +extension PassepartoutMenu: LightProfileManagerDelegate { + func didUpdateProfiles() { + install() + } +} + +extension PassepartoutMenu: LightProviderManagerDelegate { + func didUpdateProviders() { + install() + } +} diff --git a/Passepartout/Mac/Menu/ProfileItemGroup.swift b/Passepartout/Mac/Menu/ProfileItemGroup.swift new file mode 100644 index 00000000..0981304b --- /dev/null +++ b/Passepartout/Mac/Menu/ProfileItemGroup.swift @@ -0,0 +1,61 @@ +// +// ProfileItemGroup.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProfileItemGroup: ItemGroup { + private let profileManager: LightProfileManager + + private let providerManager: LightProviderManager + + private let vpnManager: LightVPNManager + + init(profileManager: LightProfileManager, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + self.profileManager = profileManager + self.providerManager = providerManager + self.vpnManager = vpnManager + } + + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + profileManager.profiles.map { + if $0.isProvider { + return providerItem(withProfile: $0, parent: parent) + } else { + return hostItem(withProfile: $0, parent: parent) + } + } + } + + private func hostItem(withProfile profile: LightProfile, parent: NSMenu) -> NSMenuItem { + HostProfileItem(profile, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } + + private func providerItem(withProfile profile: LightProfile, parent: NSMenu) -> NSMenuItem { + ProviderProfileItem(profile, providerManager: providerManager, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift new file mode 100644 index 00000000..7fd97be5 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift @@ -0,0 +1,57 @@ +// +// ProviderLocationItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension ProviderLocationItem { + class ViewModel { + private let profile: LightProfile + + let location: LightProviderLocation + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ location: LightProviderLocation, vpnManager: LightVPNManager) { + self.profile = profile + self.location = location + self.vpnManager = vpnManager + } + + var isActiveLocation: Bool { + return location.id == profile.providerServer?.locationId + } + + var isOnlyServer: Bool { + location.servers.count == 1 + } + + @objc func connectTo() { + guard isOnlyServer else { + fatalError("Connecting to a location with multiple servers?") + } + vpnManager.connect(with: profile.id, to: location.servers.first!.serverId) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderLocationItem.swift b/Passepartout/Mac/Menu/ProviderLocationItem.swift new file mode 100644 index 00000000..1af1b4fe --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderLocationItem.swift @@ -0,0 +1,71 @@ +// +// ProviderLocationItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/12/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderLocationItem: Item { + private let profile: LightProfile + + private let location: LightProviderLocation + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ location: LightProviderLocation, vpnManager: LightVPNManager) { + self.profile = profile + self.location = location + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let viewModel = ViewModel(profile, location, vpnManager: vpnManager) + let item = NSMenuItem( + title: viewModel.location.description, + action: nil, + keyEquivalent: "" + ) + item.image = viewModel.location.nsImage + item.state = viewModel.isActiveLocation ? .on : .off + item.representedObject = viewModel + + if viewModel.isOnlyServer { + item.target = viewModel + item.action = #selector(viewModel.connectTo) + } else { + let submenu = NSMenu() + location.servers.forEach { + submenu.addItem(serverItem(with: $0, parent: submenu)) + } + item.submenu = submenu + } + + return item + } + + private func serverItem(with server: LightProviderServer, parent: NSMenu) -> NSMenuItem { + ProviderServerItem(profile, server, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift new file mode 100644 index 00000000..0c2a29a0 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift @@ -0,0 +1,65 @@ +// +// ProviderProfileItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/13/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension ProviderProfileItem { + class ViewModel { + let profile: LightProfile + + private let providerManager: LightProviderManager + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + self.profile = profile + self.providerManager = providerManager + self.vpnManager = vpnManager + } + + private var providerName: String { + guard let providerName = profile.providerName else { + fatalError("ProviderProfileItem but profile is not a provider") + } + return providerName + } + + private var vpnProtocol: String { + profile.vpnProtocol + } + + var categories: [LightProviderCategory] { + providerManager.categories(providerName, vpnProtocol: vpnProtocol) + } + + func isActiveCategory(_ category: LightProviderCategory) -> Bool { + return category.name == profile.providerServer?.categoryName + } + + func downloadIfNeeded() { + providerManager.downloadIfNeeded(providerName, vpnProtocol: vpnProtocol) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderProfileItem.swift b/Passepartout/Mac/Menu/ProviderProfileItem.swift new file mode 100644 index 00000000..1fc4ef4c --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderProfileItem.swift @@ -0,0 +1,95 @@ +// +// ProviderProfileItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/13/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderProfileItem: Item { + private let viewModel: ViewModel + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + viewModel = ViewModel(profile, providerManager: providerManager, vpnManager: vpnManager) + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.profile.name, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.profile.isActive ? .on : .off + item.representedObject = viewModel + item.submenu = submenu() + return item + } + + private func submenu() -> NSMenu { + let menu = NSMenu() + let categories = viewModel.categories + if categories.isEmpty { + let downloadItem = TextItem(L10n.Global.Strings.download) { + viewModel.downloadIfNeeded() + } + menu.addItem(downloadItem.asMenuItem(withParent: menu)) + } else if categories.count > 1 { + viewModel.categories.forEach { + menu.addItem(categoryItem(with: $0, parent: menu)) + } + } else { + viewModel.categories.first?.locations.forEach { + menu.addItem(locationItem(with: $0, parent: menu)) + } + } + return menu + } + + private func categoryItem(with category: LightProviderCategory, parent: NSMenu) -> NSMenuItem { + let title = !category.name.isEmpty ? category.name.capitalized : L10n.Global.Strings.default + let item = NSMenuItem( + title: title, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.isActiveCategory(category) ? .on : .off + item.target = viewModel + item.representedObject = viewModel + + let submenu = NSMenu() + category.locations.forEach { + submenu.addItem(locationItem(with: $0, parent: submenu)) + } + item.submenu = submenu + + return item + } + + private func locationItem(with location: LightProviderLocation, parent: NSMenu) -> NSMenuItem { + ProviderLocationItem(viewModel.profile, location, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift new file mode 100644 index 00000000..f0c64a91 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift @@ -0,0 +1,50 @@ +// +// ProviderServerItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension ProviderServerItem { + class ViewModel { + private let profile: LightProfile + + let server: LightProviderServer + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ server: LightProviderServer, vpnManager: LightVPNManager) { + self.profile = profile + self.server = server + self.vpnManager = vpnManager + } + + var isActiveServer: Bool { + server.serverId == profile.providerServer?.serverId + } + + @objc func connectTo() { + vpnManager.connect(with: profile.id, to: server.serverId) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderServerItem.swift b/Passepartout/Mac/Menu/ProviderServerItem.swift new file mode 100644 index 00000000..4131ed00 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderServerItem.swift @@ -0,0 +1,54 @@ +// +// ProviderServerItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderServerItem: Item { + private let profile: LightProfile + + private let server: LightProviderServer + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ server: LightProviderServer, vpnManager: LightVPNManager) { + self.profile = profile + self.server = server + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let viewModel = ViewModel(profile, server, vpnManager: vpnManager) + let item = NSMenuItem( + title: viewModel.server.description, + action: #selector(viewModel.connectTo), + keyEquivalent: "" + ) + item.target = viewModel + item.state = viewModel.isActiveServer ? .on : .off + item.representedObject = viewModel + return item + } +} diff --git a/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift b/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift new file mode 100644 index 00000000..87fc0f24 --- /dev/null +++ b/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift @@ -0,0 +1,81 @@ +// +// VPNItemGroup+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import Combine + +extension VPNItemGroup { + class ViewModel { + private let vpnManager: LightVPNManager + + private let toggleTitleBlock: (Bool) -> String + + private let reconnectTitleBlock: () -> String + + private var didUpdateState: [(Bool, LightVPNStatus) -> Void] = [] + + private var subscriptions: Set = [] + + init( + vpnManager: LightVPNManager, + toggleTitleBlock: @escaping (Bool) -> String, + reconnectTitleBlock: @escaping () -> String + ) { + self.vpnManager = vpnManager + self.toggleTitleBlock = toggleTitleBlock + self.reconnectTitleBlock = reconnectTitleBlock + + vpnManager.delegate = self + } + + var toggleTitle: String { + toggleTitleBlock(vpnManager.isEnabled) + } + + var reconnectTitle: String { + reconnectTitleBlock() + } + + @objc func toggleVPN() { + vpnManager.toggle() + } + + @objc func reconnectVPN() { + vpnManager.reconnect() + } + + func subscribeVPNState(_ block: @escaping (Bool, LightVPNStatus) -> Void) { + didUpdateState.append(block) + } + } +} + +extension VPNItemGroup.ViewModel: LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) { + didUpdateState.forEach { + $0(isEnabled, vpnStatus) + } + } +} diff --git a/Passepartout/Mac/Menu/VPNItemGroup.swift b/Passepartout/Mac/Menu/VPNItemGroup.swift new file mode 100644 index 00000000..0f8a8655 --- /dev/null +++ b/Passepartout/Mac/Menu/VPNItemGroup.swift @@ -0,0 +1,76 @@ +// +// VPNToggleItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct VPNItemGroup: ItemGroup { + private let viewModel: ViewModel + + init( + vpnManager: LightVPNManager, + toggleTitleBlock: @escaping (Bool) -> String, + reconnectTitleBlock: @escaping () -> String + ) { + viewModel = ViewModel( + vpnManager: vpnManager, + toggleTitleBlock: toggleTitleBlock, + reconnectTitleBlock: reconnectTitleBlock + ) + } + + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + [ + toggleItem(withParent: parent), + reconnectItem(withParent: parent) + ] + } + + private func toggleItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.toggleTitle, + action: #selector(viewModel.toggleVPN), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + viewModel.subscribeVPNState { _, _ in + item.title = viewModel.toggleTitle + } + return item + } + + private func reconnectItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.reconnectTitle, + action: #selector(viewModel.reconnectVPN), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + return item + } +} diff --git a/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift b/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift new file mode 100644 index 00000000..d3995eac --- /dev/null +++ b/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift @@ -0,0 +1,50 @@ +// +// VisibilityItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +extension VisibilityItem { + class ViewModel { + private let transformer = ObservableProcessTransformer.shared + + private let titleBlock: (Bool) -> String + + init(titleBlock: @escaping (Bool) -> String) { + self.titleBlock = titleBlock + } + + var title: String { + titleBlock(transformer.isForeground) + } + + @objc func toggleForeground() { + transformer.toggleForeground() + } + + func subscribe(_ block: @escaping () -> Void) { + transformer.subscribe(block) + } + } +} diff --git a/Passepartout/Mac/Menu/VisibilityItem.swift b/Passepartout/Mac/Menu/VisibilityItem.swift new file mode 100644 index 00000000..938da674 --- /dev/null +++ b/Passepartout/Mac/Menu/VisibilityItem.swift @@ -0,0 +1,50 @@ +// +// VisibilityItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct VisibilityItem: Item { + private let viewModel: ViewModel + + init(_ titleBlock: @escaping (Bool) -> String) { + viewModel = ViewModel(titleBlock: titleBlock) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title, + action: #selector(viewModel.toggleForeground), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + viewModel.subscribe { + item.title = viewModel.title + } + return item + } +} diff --git a/Passepartout/Mac/PassepartoutMac.swift b/Passepartout/Mac/PassepartoutMac.swift new file mode 100644 index 00000000..06bd9d93 --- /dev/null +++ b/Passepartout/Mac/PassepartoutMac.swift @@ -0,0 +1,36 @@ +// +// PassepartoutMac.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation + +class PassepartoutMac: NSObject, MacBridge { + required override init() { + super.init() + } + + let utils: MacUtils = DefaultMacUtils() + + let menu: MacMenu = DefaultMacMenu() +} diff --git a/Passepartout/Mac/Reusable/Item.swift b/Passepartout/Mac/Reusable/Item.swift new file mode 100644 index 00000000..56439411 --- /dev/null +++ b/Passepartout/Mac/Reusable/Item.swift @@ -0,0 +1,37 @@ +// +// Item.swift +// Passepartout +// +// Created by Davide De Rosa on 6/28/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol Item: ItemGroup { + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem +} + +extension Item { + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + [asMenuItem(withParent: parent)] + } +} diff --git a/Passepartout/Mac/Reusable/ItemGroup.swift b/Passepartout/Mac/Reusable/ItemGroup.swift new file mode 100644 index 00000000..61b7e224 --- /dev/null +++ b/Passepartout/Mac/Reusable/ItemGroup.swift @@ -0,0 +1,31 @@ +// +// ItemGroup.swift +// Passepartout +// +// Created by Davide De Rosa on 7/4/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol ItemGroup { + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] +} diff --git a/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift b/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift new file mode 100644 index 00000000..07b1a455 --- /dev/null +++ b/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift @@ -0,0 +1,69 @@ +// +// ObservableProcessTransformer.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import Combine + +class ObservableProcessTransformer: ObservableObject { + static let shared = ObservableProcessTransformer() + + private let transformer = ProcessTransformer() + + private var subscriptions: Set = [] + + private init() { + } + + var isForeground: Bool { + transformer.isForeground + } + + func toggleForeground() { + guard transformer.toggleForeground() else { + return + } + objectWillChange.send() + } + + func bringToForeground() { + guard transformer.bringToForeground() else { + return + } + objectWillChange.send() + } + + func sendToBackground() { + guard transformer.sendToBackground() else { + return + } + objectWillChange.send() + } + + func subscribe(_ block: @escaping () -> Void) { + objectWillChange + .sink(receiveValue: block) + .store(in: &subscriptions) + } +} diff --git a/Passepartout/Mac/Reusable/ProcessTransformer.h b/Passepartout/Mac/Reusable/ProcessTransformer.h new file mode 100644 index 00000000..37d4d79e --- /dev/null +++ b/Passepartout/Mac/Reusable/ProcessTransformer.h @@ -0,0 +1,40 @@ +// +// ProcessTransformer.h +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ProcessTransformer : NSObject + +@property (nonatomic, readonly) BOOL isForeground; + +- (BOOL)toggleForeground; +- (BOOL)bringToForeground; +- (BOOL)sendToBackground; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Passepartout/Mac/Reusable/ProcessTransformer.m b/Passepartout/Mac/Reusable/ProcessTransformer.m new file mode 100644 index 00000000..ee6d1ce8 --- /dev/null +++ b/Passepartout/Mac/Reusable/ProcessTransformer.m @@ -0,0 +1,96 @@ +// +// ProcessTransformer.m +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +#import "ProcessTransformer.h" + +@import AppKit; +@import ApplicationServices; +//@import Carbon; + +// https://stackoverflow.com/a/22242797/784615 + +@interface ProcessTransformer () + +@property (nonatomic) BOOL isForeground; + +- (BOOL)tranformAppToState:(ProcessApplicationTransformState)newState; + +@end + +@implementation ProcessTransformer + +- (instancetype)init +{ + if ((self = [super init])) { + self.isForeground = YES; + } + return self; +} + +- (BOOL)toggleForeground +{ + if (self.isForeground) { + return [self sendToBackground]; + } else { + return [self bringToForeground]; + } +} + +- (BOOL)bringToForeground +{ + if (![self tranformAppToState:kProcessTransformToForegroundApplication]) { + return NO; + } +// if (SetSystemUIMode(kUIModeNormal, 0) != 0) { +// return NO; +// } + [NSApp activateIgnoringOtherApps:YES]; + self.isForeground = YES; + return YES; +} + +- (BOOL)sendToBackground +{ + if (![self tranformAppToState:kProcessTransformToBackgroundApplication]) { + return NO; + } + self.isForeground = NO; + return YES; +} + +- (BOOL)tranformAppToState:(ProcessApplicationTransformState)newState +{ + ProcessSerialNumber psn = { 0, kCurrentProcess }; + OSStatus transformStatus = TransformProcessType(&psn, newState); + + if ((transformStatus != 0)) { + NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:transformStatus userInfo:nil]; + NSLog(@"tranformAppToState: Unable to transform app state: %@", error); + } + + return (transformStatus == 0); +} + +@end diff --git a/Passepartout/Mac/Reusable/SeparatorItem.swift b/Passepartout/Mac/Reusable/SeparatorItem.swift new file mode 100644 index 00000000..9a790a73 --- /dev/null +++ b/Passepartout/Mac/Reusable/SeparatorItem.swift @@ -0,0 +1,33 @@ +// +// SeparatorItem.swift +// Passepartout +// +// Created by Davide De Rosa on 6/29/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct SeparatorItem: Item { + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + .separator() + } +} diff --git a/Passepartout/Mac/Reusable/StaticSystemMenu.swift b/Passepartout/Mac/Reusable/StaticSystemMenu.swift new file mode 100644 index 00000000..6b435d74 --- /dev/null +++ b/Passepartout/Mac/Reusable/StaticSystemMenu.swift @@ -0,0 +1,47 @@ +// +// StaticSystemMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct StaticSystemMenu: SystemMenu { + let children: [ItemGroup] + + init(_ children: [ItemGroup]) { + self.children = children + } + + var asMenu: NSMenu { + let menu = NSMenu() + if !children.isEmpty { + children.forEach { + $0.asMenuItems(withParent: menu).forEach { + menu.addItem($0) + } + } + } + return menu + } +} diff --git a/Passepartout/Mac/Reusable/SystemMenu.swift b/Passepartout/Mac/Reusable/SystemMenu.swift new file mode 100644 index 00000000..51c1b755 --- /dev/null +++ b/Passepartout/Mac/Reusable/SystemMenu.swift @@ -0,0 +1,31 @@ +// +// SystemMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/2/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol SystemMenu { + var asMenu: NSMenu { get } +} diff --git a/Passepartout/Mac/Reusable/TextItem+ViewModel.swift b/Passepartout/Mac/Reusable/TextItem+ViewModel.swift new file mode 100644 index 00000000..70308dd6 --- /dev/null +++ b/Passepartout/Mac/Reusable/TextItem+ViewModel.swift @@ -0,0 +1,67 @@ +// +// TextItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/2/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import Combine + +extension TextItem { + class ViewModel { + let title: CurrentValueSubject + + let state: CurrentValueSubject + + private let action: (() -> Void)? + + var hasAction: Bool { + action != nil + } + + private var subscriptions: Set = [] + + init(_ title: String, state: State = .none, action: (() -> Void)? = nil) { + self.title = CurrentValueSubject(title) + self.state = CurrentValueSubject(state) + self.action = action + } + + @objc func representedAction() { + action?() + } + + func subscribeTitle(_ block: @escaping (String) -> Void) { + title + .removeDuplicates() + .sink(receiveValue: block) + .store(in: &subscriptions) + } + + func subscribeState(_ block: @escaping (State) -> Void) { + state + .removeDuplicates() + .sink(receiveValue: block) + .store(in: &subscriptions) + } + } +} diff --git a/Passepartout/Mac/Reusable/TextItem.swift b/Passepartout/Mac/Reusable/TextItem.swift new file mode 100644 index 00000000..e672dc3c --- /dev/null +++ b/Passepartout/Mac/Reusable/TextItem.swift @@ -0,0 +1,93 @@ +// +// TextItem.swift +// Passepartout +// +// Created by Davide De Rosa on 6/28/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Passepartout is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct TextItem: Item { + enum State { + case none + + case checked + + case unchecked + } + + private let viewModel: ViewModel + + private let key: String? + + let children: [Item] + + init(_ title: String, state: State = .none, key: String? = nil, _ children: [Item] = [], action: (() -> Void)? = nil) { + self.init(ViewModel(title, state: state, action: action), key: key, children) + } + + init(_ viewModel: ViewModel, key: String? = nil, _ children: [Item] = []) { + self.viewModel = viewModel + self.key = key + self.children = children + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title.value, + action: viewModel.hasAction ? #selector(viewModel.representedAction) : nil, + keyEquivalent: key ?? "" + ) + if viewModel.hasAction { + item.target = viewModel + } + item.state = state + item.representedObject = viewModel + + if !children.isEmpty { + let submenu = NSMenu() + children.forEach { + submenu.addItem($0.asMenuItem(withParent: submenu)) + } + item.submenu = submenu + } + + viewModel.subscribeTitle { + item.title = $0 + } + viewModel.subscribeState { _ in + item.state = state + } + + return item + } + + private var state: NSControl.StateValue { + switch viewModel.state.value { + case .none, .unchecked: + return .off + + case .checked: + return .on + } + } +} diff --git a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift index 599fb27e..c5da8c04 100644 --- a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift @@ -37,7 +37,7 @@ public protocol VPNManager { var masksPrivateData: Bool { get set } - func connectWithActiveProfile() async throws + func connectWithActiveProfile(toServer newServerId: String?) async throws @discardableResult func connect(with profileId: UUID) async throws -> Profile @@ -47,8 +47,6 @@ public protocol VPNManager { func modifyActiveProfile(_ block: (inout Profile) -> Void) async throws - func toggle() -> Bool - func disable() async func uninstall() async diff --git a/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift b/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift index 6e1aec25..8955b159 100644 --- a/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift +++ b/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift @@ -34,13 +34,20 @@ public struct ProviderLocation { public let countryCode: String - public let onlyServer: ProviderServer? + public var onlyServer: ProviderServer? { + guard servers?.count == 1 else { + return nil + } + return servers?.first + } - public init(providerMetadata: ProviderMetadata, vpnProtocol: VPNProtocolType, categoryName: String, countryCode: String, onlyServer: ProviderServer?) { + public let servers: [ProviderServer]? + + public init(providerMetadata: ProviderMetadata, vpnProtocol: VPNProtocolType, categoryName: String, countryCode: String, servers: [ProviderServer]?) { self.providerMetadata = providerMetadata self.vpnProtocol = vpnProtocol self.categoryName = categoryName self.countryCode = countryCode - self.onlyServer = onlyServer + self.servers = servers } } diff --git a/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift b/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift index 85cde36b..d88c7d85 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift @@ -62,17 +62,22 @@ struct LocationMapper: DTOMapper, ModelMapper { return nil } - var server: ProviderServer? - if dto.servers?.count == 1, let serverDTO = dto.servers?.anyObject() as? CDInfrastructureServer { - server = ServerMapper.toModel(serverDTO) - } +// var server: ProviderServer? +// if dto.servers?.count == 1, let serverDTO = dto.servers?.anyObject() as? CDInfrastructureServer { +// server = ServerMapper.toModel(serverDTO) +// } + let servers = (dto.servers?.allObjects as? [CDInfrastructureServer])? + .compactMap(ServerMapper.toModel) return ProviderLocation( providerMetadata: providerMetadata, vpnProtocol: vpnProtocol, categoryName: categoryName, countryCode: countryCode, - onlyServer: server +// servers: server.map { +// [$0] +// } + servers: servers ) } } diff --git a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift index dc0710df..87374e35 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift @@ -32,7 +32,7 @@ import PassepartoutUtils // ProfileManager.activateProfile() extension DefaultVPNManager { - public func connectWithActiveProfile() async throws { + public func connectWithActiveProfile(toServer newServerId: String?) async throws { guard currentState.vpnStatus != .connected else { pp_log.warning("VPN is already connected") return @@ -41,7 +41,11 @@ extension DefaultVPNManager { pp_log.warning("No active profile") return } - try await connect(with: profileId) + if let newServerId = newServerId { + try await connect(with: profileId, toServer: newServerId) + } else { + try await connect(with: profileId) + } } @discardableResult @@ -86,7 +90,7 @@ extension DefaultVPNManager { guard !profileManager.isActiveProfile(profileId) || currentState.vpnStatus != .connected || oldServerId != newServer.id else { - + pp_log.info("Profile \(profile.logDescription) is already active and connected to: \(newServer.logDescription)") return profile } diff --git a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift index e21a18b4..4207c44c 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift @@ -90,22 +90,6 @@ public class DefaultVPNManager Bool { - guard let configuration = vpnConfigurationWithCurrentProfile() else { - return false - } - Task { - pp_log.info("Toggling VPN (enabled: \(currentState.isEnabled) -> \(!currentState.isEnabled))") - clearLastError() - if !currentState.isEnabled { - await strategy.connect(configuration: configuration) - } else { - await strategy.disconnect() - } - } - return true - } - func reinstate(_ configuration: VPNConfiguration) async { pp_log.info("Reinstating VPN") clearLastError() diff --git a/swiftgen.yml b/swiftgen.yml new file mode 100644 index 00000000..530a0010 --- /dev/null +++ b/swiftgen.yml @@ -0,0 +1,15 @@ +strings: + inputs: + - Passepartout/AppShared/en.lproj/Localizable.strings + outputs: + - templateName: structured-swift4 + output: Passepartout/AppShared/Constants/SwiftGen+Strings.swift + +xcassets: + inputs: + - Passepartout/App/Assets.xcassets + - Passepartout/App/Flags.xcassets + - Passepartout/App/Providers.xcassets + outputs: + - templateName: swift4 + output: Passepartout/App/Constants/SwiftGen+Assets.swift