diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 7d5937a..8b47c7b 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -21,9 +21,10 @@ jobs:
- name: Checkout
uses: actions/checkout@v4
- - uses: maxim-lobanov/setup-xcode@v1
+ - name: Set up Xcode
+ uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: latest-stable
+ xcode-version: '26.0-beta'
- name: Test
run: |
diff --git a/AppIcon.icon/Assets/2 - Layer.svg b/AppIcon.icon/Assets/2 - Layer.svg
new file mode 100644
index 0000000..84ec4f9
--- /dev/null
+++ b/AppIcon.icon/Assets/2 - Layer.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/AppIcon.icon/Assets/3 - Layer.svg b/AppIcon.icon/Assets/3 - Layer.svg
new file mode 100644
index 0000000..ce77e37
--- /dev/null
+++ b/AppIcon.icon/Assets/3 - Layer.svg
@@ -0,0 +1,9 @@
+
+
\ No newline at end of file
diff --git a/AppIcon.icon/icon.json b/AppIcon.icon/icon.json
new file mode 100644
index 0000000..5f83b4f
--- /dev/null
+++ b/AppIcon.icon/icon.json
@@ -0,0 +1,40 @@
+{
+ "fill" : {
+ "linear-gradient" : [
+ "srgb:0.62353,0.04706,0.70196,1.00000",
+ "srgb:0.08235,0.18039,0.67843,1.00000"
+ ]
+ },
+ "groups" : [
+ {
+ "blend-mode" : "normal",
+ "blur-material" : null,
+ "layers" : [
+ {
+ "glass" : true,
+ "image-name" : "3 - Layer.svg",
+ "name" : "3 - Layer"
+ },
+ {
+ "glass" : true,
+ "image-name" : "2 - Layer.svg",
+ "name" : "2 - Layer"
+ }
+ ],
+ "shadow" : {
+ "kind" : "neutral",
+ "opacity" : 0.5
+ },
+ "translucency" : {
+ "enabled" : true,
+ "value" : 0.5
+ }
+ }
+ ],
+ "supported-platforms" : {
+ "circles" : [
+ "watchOS"
+ ],
+ "squares" : "shared"
+ }
+}
\ No newline at end of file
diff --git a/HackerTube.xcodeproj/project.pbxproj b/HackerTube.xcodeproj/project.pbxproj
index 2ec9f23..fbe6ada 100644
--- a/HackerTube.xcodeproj/project.pbxproj
+++ b/HackerTube.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 77;
+ objectVersion = 90;
objects = {
/* Begin PBXBuildFile section */
@@ -11,6 +11,7 @@
D59139412895851300369402 /* TVServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D59139402895851300369402 /* TVServices.framework */; };
D59139482895851300369402 /* TopShelf.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = D591393F2895851300369402 /* TopShelf.appex */; platformFilters = (tvos, ); settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
D591394E2895854100369402 /* CCCApi in Frameworks */ = {isa = PBXBuildFile; productRef = D591394D2895854100369402 /* CCCApi */; };
+ D5F872252DFC3F3F002D2F28 /* AppIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = D5F872242DFC3F35002D2F28 /* AppIcon.icon */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -40,14 +41,12 @@
/* Begin PBXCopyFilesBuildPhase section */
D59139492895851300369402 /* Embed Foundation Extensions */ = {
isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
dstPath = "";
- dstSubfolderSpec = 13;
+ dstSubfolder = PlugIns;
files = (
D59139482895851300369402 /* TopShelf.appex in Embed Foundation Extensions */,
);
name = "Embed Foundation Extensions";
- runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
@@ -61,6 +60,7 @@
D5D2CB292D43EBB300E08E44 /* Screenshots.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = Screenshots.xctestplan; sourceTree = ""; };
D5D2CB2A2D43EBB300E08E44 /* UnitTests.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = UnitTests.xctestplan; sourceTree = ""; };
D5EFB19C2B407683008CFE82 /* HackerTubeUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HackerTubeUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ D5F872242DFC3F35002D2F28 /* AppIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = AppIcon.icon; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
@@ -112,34 +112,26 @@
/* Begin PBXFrameworksBuildPhase section */
D591393C2895851300369402 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
files = (
D59139412895851300369402 /* TVServices.framework in Frameworks */,
D591394E2895854100369402 /* CCCApi in Frameworks */,
);
- runOnlyForDeploymentPostprocessing = 0;
};
D591395628958B2600369402 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5A156D1289462B3006989FF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
files = (
D50C6F7628956DFC0003D1D0 /* CCCApi in Frameworks */,
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5EFB1992B407683008CFE82 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
@@ -157,6 +149,7 @@
children = (
D557E8BA2896F70400342EE2 /* README.md */,
D5D2CB292D43EBB300E08E44 /* Screenshots.xctestplan */,
+ D5F872242DFC3F35002D2F28 /* AppIcon.icon */,
D5D2CB2A2D43EBB300E08E44 /* UnitTests.xctestplan */,
D5AFD6D92C9BFCF700BF89F5 /* HackerTube */,
D50C6F7328956D770003D1D0 /* CCCApi */,
@@ -194,8 +187,6 @@
);
buildRules = (
);
- dependencies = (
- );
fileSystemSynchronizedGroups = (
D5AFD6FB2C9BFCFB00BF89F5 /* TopShelf */,
);
@@ -282,7 +273,7 @@
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1510;
- LastUpgradeCheck = 1530;
+ LastUpgradeCheck = 2600;
TargetAttributes = {
D591393E2895851300369402 = {
CreatedOnToolsVersion = 13.4.1;
@@ -310,7 +301,7 @@
de,
);
mainGroup = D5A156CB289462B3006989FF;
- preferredProjectObjectVersion = 77;
+ preferredProjectObjectVersion = 90;
productRefGroup = D5A156D5289462B3006989FF /* Products */;
projectDirPath = "";
projectRoot = "";
@@ -326,62 +317,47 @@
/* Begin PBXResourcesBuildPhase section */
D591393D2895851300369402 /* Resources */ = {
isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D591395728958B2600369402 /* Resources */ = {
isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5A156D2289462B3006989FF /* Resources */ = {
isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
+ D5F872252DFC3F3F002D2F28 /* AppIcon.icon in Resources */,
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5EFB19A2B407683008CFE82 /* Resources */ = {
isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
D591393B2895851300369402 /* Sources */ = {
isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D591395528958B2600369402 /* Sources */ = {
isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5A156D0289462B3006989FF /* Sources */ = {
isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
D5EFB1982B407683008CFE82 /* Sources */ = {
isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
files = (
);
- runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
@@ -407,12 +383,11 @@
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
- D591394A2895851300369402 /* Debug */ = {
+ D591394A2895851300369402 /* Debug configuration for PBXNativeTarget "TopShelf" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = TopShelf/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = TopShelf;
@@ -422,22 +397,20 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.4.1;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTube.TopShelf;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Debug;
};
- D591394B2895851300369402 /* Release */ = {
+ D591394B2895851300369402 /* Release configuration for PBXNativeTarget "TopShelf" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = TopShelf/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = TopShelf;
@@ -447,25 +420,23 @@
"@executable_path/Frameworks",
"@executable_path/../../Frameworks",
);
- MARKETING_VERSION = 1.4.1;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTube.TopShelf;
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = 3;
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Release;
};
- D591396028958B2600369402 /* Debug */ = {
+ D591396028958B2600369402 /* Debug configuration for PBXNativeTarget "HackerTubeTests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTubeTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
@@ -473,19 +444,18 @@
SWIFT_EMIT_LOC_STRINGS = NO;
TARGETED_DEVICE_FAMILY = "1,2,3";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HackerTube.app/HackerTube";
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Debug;
};
- D591396128958B2600369402 /* Release */ = {
+ D591396128958B2600369402 /* Release configuration for PBXNativeTarget "HackerTubeTests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTubeTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator";
@@ -493,11 +463,11 @@
SWIFT_EMIT_LOC_STRINGS = NO;
TARGETED_DEVICE_FAMILY = "1,2,3";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/HackerTube.app/HackerTube";
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Release;
};
- D5A156E0289462B3006989FF /* Debug */ = {
+ D5A156E0289462B3006989FF /* Debug configuration for PBXProject "HackerTube" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -533,6 +503,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
+ DEVELOPMENT_TEAM = 3W68UU92K3;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -556,13 +527,14 @@
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = appletvos;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 6.0;
};
name = Debug;
};
- D5A156E1289462B3006989FF /* Release */ = {
+ D5A156E1289462B3006989FF /* Release configuration for PBXProject "HackerTube" */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -598,6 +570,7 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = 3W68UU92K3;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
@@ -614,6 +587,7 @@
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = appletvos;
+ STRING_CATALOG_GENERATE_SYMBOLS = YES;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
SWIFT_VERSION = 6.0;
@@ -621,21 +595,21 @@
};
name = Release;
};
- D5A156E3289462B3006989FF /* Debug */ = {
+ D5A156E3289462B3006989FF /* Debug configuration for PBXNativeTarget "HackerTube" */ = {
isa = XCBuildConfiguration;
buildSettings = {
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=*]" = AppIcon_iOS;
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = AppIcon_tvOS;
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=xros*]" = AppIcon_visionOS;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=*]" = AppIcon;
+ "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]" = AppIcon_tvOS;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = HackerTube/HackerTube.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"HackerTube/Preview Content\"";
- DEVELOPMENT_TEAM = 3W68UU92K3;
ENABLE_APP_SANDBOX = YES;
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
+ ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = HackerTube/Info.plist;
@@ -646,12 +620,12 @@
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.4.1;
+ MARKETING_VERSION = 1.5.0;
MERGED_BINARY_TYPE = automatic;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTube;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -661,26 +635,26 @@
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2,3,6,7";
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
XROS_DEPLOYMENT_TARGET = 2.0;
};
name = Debug;
};
- D5A156E4289462B3006989FF /* Release */ = {
+ D5A156E4289462B3006989FF /* Release configuration for PBXNativeTarget "HackerTube" */ = {
isa = XCBuildConfiguration;
buildSettings = {
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=*]" = AppIcon_iOS;
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletvos*]" = AppIcon_tvOS;
- "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=xros*]" = AppIcon_visionOS;
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=*]" = AppIcon;
+ "ASSETCATALOG_COMPILER_APPICON_NAME[sdk=appletv*]" = AppIcon_tvOS;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_ENTITLEMENTS = HackerTube/HackerTube.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_ASSET_PATHS = "\"HackerTube/Preview Content\"";
- DEVELOPMENT_TEAM = 3W68UU92K3;
ENABLE_APP_SANDBOX = YES;
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
+ ENABLE_OUTGOING_NETWORK_CONNECTIONS = YES;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = HackerTube/Info.plist;
@@ -691,12 +665,12 @@
INFOPLIST_KEY_UIRequiredDeviceCapabilities = arm64;
INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
INFOPLIST_KEY_UIUserInterfaceStyle = Automatic;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
- MARKETING_VERSION = 1.4.1;
+ MARKETING_VERSION = 1.5.0;
MERGED_BINARY_TYPE = automatic;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTube;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -706,22 +680,21 @@
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
TARGETED_DEVICE_FAMILY = "1,2,3,6,7";
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
XROS_DEPLOYMENT_TARGET = 2.0;
};
name = Release;
};
- D5EFB1A42B407683008CFE82 /* Debug */ = {
+ D5EFB1A42B407683008CFE82 /* Debug configuration for PBXNativeTarget "HackerTubeUITests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTubeUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
@@ -731,21 +704,20 @@
SWIFT_EMIT_LOC_STRINGS = NO;
TARGETED_DEVICE_FAMILY = "1,2,3";
TEST_TARGET_NAME = HackerTube;
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Debug;
};
- D5EFB1A52B407683008CFE82 /* Release */ = {
+ D5EFB1A52B407683008CFE82 /* Release configuration for PBXNativeTarget "HackerTubeUITests" */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEAD_CODE_STRIPPING = YES;
- DEVELOPMENT_TEAM = 3W68UU92K3;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 17.6;
+ IPHONEOS_DEPLOYMENT_TARGET = 18.6;
PRODUCT_BUNDLE_IDENTIFIER = nl.bernson.CCCTubeUITests;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = auto;
@@ -754,7 +726,7 @@
SWIFT_EMIT_LOC_STRINGS = NO;
TARGETED_DEVICE_FAMILY = "1,2,3";
TEST_TARGET_NAME = HackerTube;
- TVOS_DEPLOYMENT_TARGET = 17.6;
+ TVOS_DEPLOYMENT_TARGET = 18.6;
};
name = Release;
};
@@ -764,46 +736,41 @@
D591394C2895851300369402 /* Build configuration list for PBXNativeTarget "TopShelf" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- D591394A2895851300369402 /* Debug */,
- D591394B2895851300369402 /* Release */,
+ D591394A2895851300369402 /* Debug configuration for PBXNativeTarget "TopShelf" */,
+ D591394B2895851300369402 /* Release configuration for PBXNativeTarget "TopShelf" */,
);
- defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D591395F28958B2600369402 /* Build configuration list for PBXNativeTarget "HackerTubeTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- D591396028958B2600369402 /* Debug */,
- D591396128958B2600369402 /* Release */,
+ D591396028958B2600369402 /* Debug configuration for PBXNativeTarget "HackerTubeTests" */,
+ D591396128958B2600369402 /* Release configuration for PBXNativeTarget "HackerTubeTests" */,
);
- defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D5A156CF289462B3006989FF /* Build configuration list for PBXProject "HackerTube" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- D5A156E0289462B3006989FF /* Debug */,
- D5A156E1289462B3006989FF /* Release */,
+ D5A156E0289462B3006989FF /* Debug configuration for PBXProject "HackerTube" */,
+ D5A156E1289462B3006989FF /* Release configuration for PBXProject "HackerTube" */,
);
- defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D5A156E2289462B3006989FF /* Build configuration list for PBXNativeTarget "HackerTube" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- D5A156E3289462B3006989FF /* Debug */,
- D5A156E4289462B3006989FF /* Release */,
+ D5A156E3289462B3006989FF /* Debug configuration for PBXNativeTarget "HackerTube" */,
+ D5A156E4289462B3006989FF /* Release configuration for PBXNativeTarget "HackerTube" */,
);
- defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
D5EFB1A62B407683008CFE82 /* Build configuration list for PBXNativeTarget "HackerTubeUITests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- D5EFB1A42B407683008CFE82 /* Debug */,
- D5EFB1A52B407683008CFE82 /* Release */,
+ D5EFB1A42B407683008CFE82 /* Debug configuration for PBXNativeTarget "HackerTubeUITests" */,
+ D5EFB1A52B407683008CFE82 /* Release configuration for PBXNativeTarget "HackerTubeUITests" */,
);
- defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
diff --git a/HackerTube.xcodeproj/xcshareddata/xcschemes/HackerTube.xcscheme b/HackerTube.xcodeproj/xcshareddata/xcschemes/HackerTube.xcscheme
index d9e451c..f3c2ab9 100644
--- a/HackerTube.xcodeproj/xcshareddata/xcschemes/HackerTube.xcscheme
+++ b/HackerTube.xcodeproj/xcshareddata/xcschemes/HackerTube.xcscheme
@@ -1,6 +1,6 @@
-
- com.apple.security.network.client
-
- com.apple.security.app-sandbox
-
-
+
diff --git a/HackerTube/Localizable.xcstrings b/HackerTube/Localizable.xcstrings
index 18a03d0..15922d1 100644
--- a/HackerTube/Localizable.xcstrings
+++ b/HackerTube/Localizable.xcstrings
@@ -2,6 +2,7 @@
"sourceLanguage" : "en",
"strings" : {
"%lld views" : {
+ "comment" : "A label displaying the number of views for a talk.",
"localizations" : {
"de" : {
"variations" : {
@@ -9,7 +10,7 @@
"one" : {
"stringUnit" : {
"state" : "translated",
- "value" : "%lld Ansicht"
+ "value" : "%lld Aufruf"
}
},
"other" : {
@@ -60,6 +61,7 @@
}
},
"Conferences" : {
+ "comment" : "Heading for the view and tab that displays a list of conferences.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -76,11 +78,13 @@
}
},
"Copyright" : {
+ "comment" : "A heading displayed above the copyright information of a talk.",
+ "isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Urheberrechte ©"
+ "value" : "Copyright ©"
}
},
"nl" : {
@@ -92,6 +96,7 @@
}
},
"Date %@" : {
+ "comment" : "A label displaying the publication date of a talk.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -108,6 +113,8 @@
}
},
"Done" : {
+ "comment" : "A button that closes the sheet.",
+ "isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
@@ -124,6 +131,7 @@
}
},
"Failed to load data from the media.ccc.de API" : {
+ "comment" : "An error that is shown when the talks or other data could not be loaded from the streaming platform.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -139,23 +147,8 @@
}
}
},
- "No copyright information encoded in video. Please refer to the schedule of the organizer of %@ at: %@" : {
- "localizations" : {
- "de" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Im Video sind keine Copyright-Informationen kodiert. Bitte beachten Sie den Fahrplan des Veranstalters von %@ unter: %@"
- }
- },
- "nl" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Geen copyright-informatie gecodeerd in video. Raadpleeg het schema van de organisator van %@ op: %@"
- }
- }
- }
- },
"No copyright information encoded in video. Please refer to the website of the organizer of %@ at: %@" : {
+ "comment" : "A label that is shown when no copyright information is available for a talk.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -172,59 +165,42 @@
}
},
"No talks found" : {
-
- },
- "Ok" : {
+ "comment" : "A label that is shown when there are no talks in the current collection or (search) results.",
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Ok"
+ "value" : "Keine Vorträge gefunden"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Ok"
+ "value" : "Geen talks gevonden"
}
}
}
},
- "Play HD" : {
- "extractionState" : "manual",
- "localizations" : {
- "de" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "HD abspielen"
- }
- },
- "nl" : {
- "stringUnit" : {
- "state" : "translated",
- "value" : "Speel HD af"
- }
- }
- }
- },
- "Play SD" : {
- "extractionState" : "manual",
+ "Ok" : {
+ "comment" : "The title of the button that dismisses the alert.",
+ "isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
"state" : "translated",
- "value" : "SD abspielen"
+ "value" : "OK"
}
},
"nl" : {
"stringUnit" : {
"state" : "translated",
- "value" : "Speel SD af"
+ "value" : "Ok"
}
}
}
},
"Popular" : {
+ "comment" : "Heading for the popular talks view and tab.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -241,6 +217,8 @@
}
},
"Read more" : {
+ "comment" : "A button that displays the full description of a talk.",
+ "isCommentAutoGenerated" : true,
"localizations" : {
"de" : {
"stringUnit" : {
@@ -257,6 +235,7 @@
}
},
"Recent" : {
+ "comment" : "Heading for the recent talks view and tab.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -273,6 +252,7 @@
}
},
"Search" : {
+ "comment" : "Heading for the search view and tab.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -289,6 +269,7 @@
}
},
"Search talks..." : {
+ "comment" : "Placeholder text for the search field.",
"localizations" : {
"de" : {
"stringUnit" : {
@@ -305,7 +286,22 @@
}
},
"Year" : {
-
+ "comment" : "A label that indicates the year to filter talks by.",
+ "isCommentAutoGenerated" : true,
+ "localizations" : {
+ "de" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Jahr"
+ }
+ },
+ "nl" : {
+ "stringUnit" : {
+ "state" : "translated",
+ "value" : "Jaar"
+ }
+ }
+ }
}
},
"version" : "1.0"
diff --git a/TopShelf/ContentProvider.swift b/TopShelf/ContentProvider.swift
index 670d79b..e50a77f 100644
--- a/TopShelf/ContentProvider.swift
+++ b/TopShelf/ContentProvider.swift
@@ -6,7 +6,7 @@
//
import CCCApi
-import TVServices
+@preconcurrency import TVServices
class ContentProvider: TVTopShelfContentProvider {
let factory = TopShelfContentFactory()