Ver Fonte

Initial

xingcheng02 há 2 anos atrás
pai
commit
f420dfc397

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+/Pods
+XCBCTreeLangDemo.xcworkspace

+ 6 - 0
.gitmodules

@@ -0,0 +1,6 @@
+[submodule "Modules/XCTreeLang"]
+	path = Modules/XCTreeLang
+	url = https://git.forgetive.org/XCAppCollection/XCTreeLang.git
+[submodule "Modules/XCBaseContainer"]
+	path = Modules/XCBaseContainer
+	url = https://git.forgetive.org/XCAppCollection/XCBaseContainer.git

+ 1 - 0
Modules/XCBaseContainer

@@ -0,0 +1 @@
+Subproject commit eb3436576ca960e8fb98cb737e00cc30e1663361

+ 1 - 0
Modules/XCTreeLang

@@ -0,0 +1 @@
+Subproject commit 732e0e58e4d008c41264c45bb89fdc729433fe60

+ 12 - 0
Podfile

@@ -0,0 +1,12 @@
+# Uncomment the next line to define a global platform for your project
+# platform :ios, '9.0'
+
+target 'XCBCTreeLangDemo' do
+  # Comment the next line if you don't want to use dynamic frameworks
+  use_frameworks!
+
+  # Pods for XCBCTreeLangDemo
+  pod 'XCTreeLang', :path => './Modules/XCTreeLang', :modular_headers => true
+  pod 'XCBaseContainer', :path => './Modules/XCBaseContainer', :modular_headers => true
+
+end

+ 29 - 0
Podfile.lock

@@ -0,0 +1,29 @@
+PODS:
+  - Masonry (1.1.0)
+  - XCBaseContainer (0.1.0):
+    - Masonry
+    - XCTreeLang
+  - XCTreeLang (1.0.0)
+
+DEPENDENCIES:
+  - XCBaseContainer (from `./Modules/XCBaseContainer`)
+  - XCTreeLang (from `./Modules/XCTreeLang`)
+
+SPEC REPOS:
+  trunk:
+    - Masonry
+
+EXTERNAL SOURCES:
+  XCBaseContainer:
+    :path: "./Modules/XCBaseContainer"
+  XCTreeLang:
+    :path: "./Modules/XCTreeLang"
+
+SPEC CHECKSUMS:
+  Masonry: 678fab65091a9290e40e2832a55e7ab731aad201
+  XCBaseContainer: 07584f86e574c28324b8c97ae59d0a807eaf4421
+  XCTreeLang: 130d2e94429c1bf86dcafd72eadc21ceec68035b
+
+PODFILE CHECKSUM: 78a89bc5e8a711f25c9d7bcc4264e326a3da7ea5
+
+COCOAPODS: 1.11.3

+ 100 - 26
XCBCTreeLangDemo.xcodeproj/project.pbxproj

@@ -8,27 +8,32 @@
 
 /* Begin PBXBuildFile section */
 		53C0968A2A947F30002F49A5 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C096892A947F30002F49A5 /* AppDelegate.m */; };
-		53C0968D2A947F30002F49A5 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C0968C2A947F30002F49A5 /* SceneDelegate.m */; };
-		53C096902A947F30002F49A5 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C0968F2A947F30002F49A5 /* ViewController.m */; };
-		53C096932A947F30002F49A5 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53C096912A947F30002F49A5 /* Main.storyboard */; };
+		53C096902A947F30002F49A5 /* RootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C0968F2A947F30002F49A5 /* RootViewController.m */; };
 		53C096952A947F31002F49A5 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53C096942A947F31002F49A5 /* Assets.xcassets */; };
 		53C096982A947F31002F49A5 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 53C096962A947F31002F49A5 /* LaunchScreen.storyboard */; };
 		53C0969B2A947F31002F49A5 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C0969A2A947F31002F49A5 /* main.m */; };
+		53C096A22A9481C3002F49A5 /* RootViewController.xct in Resources */ = {isa = PBXBuildFile; fileRef = 53C096A12A9481B0002F49A5 /* RootViewController.xct */; };
+		53C096A62A9486A0002F49A5 /* TabItemVCViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 53C096A52A9486A0002F49A5 /* TabItemVCViewController.m */; };
+		DD042FD017F1FACB06F84A3C /* Pods_XCBCTreeLangDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90C26AE448EC59415A79E6E1 /* Pods_XCBCTreeLangDemo.framework */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXFileReference section */
+		347400872EBFABD6B974AFA7 /* Pods-XCBCTreeLangDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XCBCTreeLangDemo.debug.xcconfig"; path = "Target Support Files/Pods-XCBCTreeLangDemo/Pods-XCBCTreeLangDemo.debug.xcconfig"; sourceTree = "<group>"; };
 		53C096852A947F30002F49A5 /* XCBCTreeLangDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = XCBCTreeLangDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		53C096882A947F30002F49A5 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
 		53C096892A947F30002F49A5 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
-		53C0968B2A947F30002F49A5 /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = "<group>"; };
-		53C0968C2A947F30002F49A5 /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = "<group>"; };
-		53C0968E2A947F30002F49A5 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
-		53C0968F2A947F30002F49A5 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
-		53C096922A947F30002F49A5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
+		53C0968E2A947F30002F49A5 /* RootViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RootViewController.h; sourceTree = "<group>"; };
+		53C0968F2A947F30002F49A5 /* RootViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RootViewController.m; sourceTree = "<group>"; };
 		53C096942A947F31002F49A5 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		53C096972A947F31002F49A5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 		53C096992A947F31002F49A5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		53C0969A2A947F31002F49A5 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
+		53C096A12A9481B0002F49A5 /* RootViewController.xct */ = {isa = PBXFileReference; lastKnownFileType = text; path = RootViewController.xct; sourceTree = "<group>"; };
+		53C096A32A94820A002F49A5 /* XCBCTreeLangDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = XCBCTreeLangDemo.entitlements; sourceTree = "<group>"; };
+		53C096A42A9486A0002F49A5 /* TabItemVCViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TabItemVCViewController.h; sourceTree = "<group>"; };
+		53C096A52A9486A0002F49A5 /* TabItemVCViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TabItemVCViewController.m; sourceTree = "<group>"; };
+		672BB5EF029DD06192E5B1B8 /* Pods-XCBCTreeLangDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-XCBCTreeLangDemo.release.xcconfig"; path = "Target Support Files/Pods-XCBCTreeLangDemo/Pods-XCBCTreeLangDemo.release.xcconfig"; sourceTree = "<group>"; };
+		90C26AE448EC59415A79E6E1 /* Pods_XCBCTreeLangDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_XCBCTreeLangDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -36,17 +41,37 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				DD042FD017F1FACB06F84A3C /* Pods_XCBCTreeLangDemo.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
+		1AD6D0C2C6C900A675FEFCC7 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				90C26AE448EC59415A79E6E1 /* Pods_XCBCTreeLangDemo.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+		42C54B7BE6BB7261BF0DE54D /* Pods */ = {
+			isa = PBXGroup;
+			children = (
+				347400872EBFABD6B974AFA7 /* Pods-XCBCTreeLangDemo.debug.xcconfig */,
+				672BB5EF029DD06192E5B1B8 /* Pods-XCBCTreeLangDemo.release.xcconfig */,
+			);
+			path = Pods;
+			sourceTree = "<group>";
+		};
 		53C0967C2A947F30002F49A5 = {
 			isa = PBXGroup;
 			children = (
 				53C096872A947F30002F49A5 /* XCBCTreeLangDemo */,
 				53C096862A947F30002F49A5 /* Products */,
+				42C54B7BE6BB7261BF0DE54D /* Pods */,
+				1AD6D0C2C6C900A675FEFCC7 /* Frameworks */,
 			);
 			sourceTree = "<group>";
 		};
@@ -61,13 +86,14 @@
 		53C096872A947F30002F49A5 /* XCBCTreeLangDemo */ = {
 			isa = PBXGroup;
 			children = (
+				53C096A32A94820A002F49A5 /* XCBCTreeLangDemo.entitlements */,
 				53C096882A947F30002F49A5 /* AppDelegate.h */,
 				53C096892A947F30002F49A5 /* AppDelegate.m */,
-				53C0968B2A947F30002F49A5 /* SceneDelegate.h */,
-				53C0968C2A947F30002F49A5 /* SceneDelegate.m */,
-				53C0968E2A947F30002F49A5 /* ViewController.h */,
-				53C0968F2A947F30002F49A5 /* ViewController.m */,
-				53C096912A947F30002F49A5 /* Main.storyboard */,
+				53C0968E2A947F30002F49A5 /* RootViewController.h */,
+				53C0968F2A947F30002F49A5 /* RootViewController.m */,
+				53C096A12A9481B0002F49A5 /* RootViewController.xct */,
+				53C096A42A9486A0002F49A5 /* TabItemVCViewController.h */,
+				53C096A52A9486A0002F49A5 /* TabItemVCViewController.m */,
 				53C096942A947F31002F49A5 /* Assets.xcassets */,
 				53C096962A947F31002F49A5 /* LaunchScreen.storyboard */,
 				53C096992A947F31002F49A5 /* Info.plist */,
@@ -83,9 +109,11 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = 53C0969E2A947F31002F49A5 /* Build configuration list for PBXNativeTarget "XCBCTreeLangDemo" */;
 			buildPhases = (
+				C3EF3A7F337150FC2B581B9C /* [CP] Check Pods Manifest.lock */,
 				53C096812A947F30002F49A5 /* Sources */,
 				53C096822A947F30002F49A5 /* Frameworks */,
 				53C096832A947F30002F49A5 /* Resources */,
+				013A3250E2F98E240465A627 /* [CP] Embed Pods Frameworks */,
 			);
 			buildRules = (
 			);
@@ -135,35 +163,69 @@
 			files = (
 				53C096982A947F31002F49A5 /* LaunchScreen.storyboard in Resources */,
 				53C096952A947F31002F49A5 /* Assets.xcassets in Resources */,
-				53C096932A947F30002F49A5 /* Main.storyboard in Resources */,
+				53C096A22A9481C3002F49A5 /* RootViewController.xct in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXResourcesBuildPhase section */
 
+/* Begin PBXShellScriptBuildPhase section */
+		013A3250E2F98E240465A627 /* [CP] Embed Pods Frameworks */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-XCBCTreeLangDemo/Pods-XCBCTreeLangDemo-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+			);
+			name = "[CP] Embed Pods Frameworks";
+			outputFileListPaths = (
+				"${PODS_ROOT}/Target Support Files/Pods-XCBCTreeLangDemo/Pods-XCBCTreeLangDemo-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-XCBCTreeLangDemo/Pods-XCBCTreeLangDemo-frameworks.sh\"\n";
+			showEnvVarsInLog = 0;
+		};
+		C3EF3A7F337150FC2B581B9C /* [CP] Check Pods Manifest.lock */ = {
+			isa = PBXShellScriptBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+			);
+			inputFileListPaths = (
+			);
+			inputPaths = (
+				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+				"${PODS_ROOT}/Manifest.lock",
+			);
+			name = "[CP] Check Pods Manifest.lock";
+			outputFileListPaths = (
+			);
+			outputPaths = (
+				"$(DERIVED_FILE_DIR)/Pods-XCBCTreeLangDemo-checkManifestLockResult.txt",
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+			shellPath = /bin/sh;
+			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+			showEnvVarsInLog = 0;
+		};
+/* End PBXShellScriptBuildPhase section */
+
 /* Begin PBXSourcesBuildPhase section */
 		53C096812A947F30002F49A5 /* Sources */ = {
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				53C096902A947F30002F49A5 /* ViewController.m in Sources */,
+				53C096902A947F30002F49A5 /* RootViewController.m in Sources */,
 				53C0968A2A947F30002F49A5 /* AppDelegate.m in Sources */,
+				53C096A62A9486A0002F49A5 /* TabItemVCViewController.m in Sources */,
 				53C0969B2A947F31002F49A5 /* main.m in Sources */,
-				53C0968D2A947F30002F49A5 /* SceneDelegate.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 /* End PBXSourcesBuildPhase section */
 
 /* Begin PBXVariantGroup section */
-		53C096912A947F30002F49A5 /* Main.storyboard */ = {
-			isa = PBXVariantGroup;
-			children = (
-				53C096922A947F30002F49A5 /* Base */,
-			);
-			name = Main.storyboard;
-			sourceTree = "<group>";
-		};
 		53C096962A947F31002F49A5 /* LaunchScreen.storyboard */ = {
 			isa = PBXVariantGroup;
 			children = (
@@ -293,17 +355,19 @@
 		};
 		53C0969F2A947F31002F49A5 /* Debug */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 347400872EBFABD6B974AFA7 /* Pods-XCBCTreeLangDemo.debug.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_ENTITLEMENTS = XCBCTreeLangDemo/XCBCTreeLangDemo.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = JZ592SWL67;
+				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = XCBCTreeLangDemo/Info.plist;
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
-				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -313,6 +377,10 @@
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = org.forgetive.demo.XCBCTreeLangDemo;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = YES;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};
@@ -320,17 +388,19 @@
 		};
 		53C096A02A947F31002F49A5 /* Release */ = {
 			isa = XCBuildConfiguration;
+			baseConfigurationReference = 672BB5EF029DD06192E5B1B8 /* Pods-XCBCTreeLangDemo.release.xcconfig */;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+				CODE_SIGN_ENTITLEMENTS = XCBCTreeLangDemo/XCBCTreeLangDemo.entitlements;
 				CODE_SIGN_STYLE = Automatic;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = JZ592SWL67;
+				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				GENERATE_INFOPLIST_FILE = YES;
 				INFOPLIST_FILE = XCBCTreeLangDemo/Info.plist;
 				INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
 				INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
-				INFOPLIST_KEY_UIMainStoryboardFile = Main;
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
 				LD_RUNPATH_SEARCH_PATHS = (
@@ -340,6 +410,10 @@
 				MARKETING_VERSION = 1.0;
 				PRODUCT_BUNDLE_IDENTIFIER = org.forgetive.demo.XCBCTreeLangDemo;
 				PRODUCT_NAME = "$(TARGET_NAME)";
+				SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
+				SUPPORTS_MACCATALYST = YES;
+				SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+				SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
 				SWIFT_EMIT_LOC_STRINGS = YES;
 				TARGETED_DEVICE_FAMILY = "1,2";
 			};

+ 1 - 1
XCBCTreeLangDemo.xcodeproj/xcuserdata/xingcheng02.xcuserdatad/xcschemes/xcschememanagement.plist

@@ -7,7 +7,7 @@
 		<key>XCBCTreeLangDemo.xcscheme_^#shared#^_</key>
 		<dict>
 			<key>orderHint</key>
-			<integer>0</integer>
+			<integer>4</integer>
 		</dict>
 	</dict>
 </dict>

+ 10 - 20
XCBCTreeLangDemo/AppDelegate.m

@@ -6,35 +6,25 @@
 //
 
 #import "AppDelegate.h"
+#import "RootViewController.h"
 
-@interface AppDelegate ()
+@interface AppDelegate () {
+    UIWindow *_window;
+}
 
 @end
 
 @implementation AppDelegate
 
+- (UIWindow *)window {
+    return _window;
+}
 
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-    // Override point for customization after application launch.
+    _window = [UIWindow new];
+    _window.rootViewController = [RootViewController new];
+    [_window makeKeyAndVisible];
     return YES;
 }
 
-
-#pragma mark - UISceneSession lifecycle
-
-
-- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
-    // Called when a new scene session is being created.
-    // Use this method to select a configuration to create the new scene with.
-    return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
-}
-
-
-- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
-    // Called when the user discards a scene session.
-    // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
-    // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
-}
-
-
 @end

+ 0 - 24
XCBCTreeLangDemo/Base.lproj/Main.storyboard

@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
-    <dependencies>
-        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
-        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
-        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
-    </dependencies>
-    <scenes>
-        <!--View Controller-->
-        <scene sceneID="tne-QT-ifu">
-            <objects>
-                <viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
-                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
-                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
-                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
-                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
-                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
-                    </view>
-                </viewController>
-                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
-            </objects>
-        </scene>
-    </scenes>
-</document>

+ 1 - 21
XCBCTreeLangDemo/Info.plist

@@ -1,25 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
 <plist version="1.0">
-<dict>
-	<key>UIApplicationSceneManifest</key>
-	<dict>
-		<key>UIApplicationSupportsMultipleScenes</key>
-		<false/>
-		<key>UISceneConfigurations</key>
-		<dict>
-			<key>UIWindowSceneSessionRoleApplication</key>
-			<array>
-				<dict>
-					<key>UISceneConfigurationName</key>
-					<string>Default Configuration</string>
-					<key>UISceneDelegateClassName</key>
-					<string>SceneDelegate</string>
-					<key>UISceneStoryboardFile</key>
-					<string>Main</string>
-				</dict>
-			</array>
-		</dict>
-	</dict>
-</dict>
+<dict/>
 </plist>

+ 1 - 1
XCBCTreeLangDemo/ViewController.h → XCBCTreeLangDemo/RootViewController.h

@@ -7,7 +7,7 @@
 
 #import <UIKit/UIKit.h>
 
-@interface ViewController : UIViewController
+@interface RootViewController : UINavigationController
 
 
 @end

+ 27 - 0
XCBCTreeLangDemo/RootViewController.m

@@ -0,0 +1,27 @@
+//
+//  ViewController.m
+//  XCBCTreeLangDemo
+//
+//  Created by xingcheng02 on 2023/8/22.
+//
+
+#import "RootViewController.h"
+
+@interface RootViewController ()
+
+@end
+
+@implementation RootViewController
+
+- (void)viewDidLoad {
+    UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
+    [appearance configureWithDefaultBackground];
+    self.navigationItem.compactAppearance = appearance;
+    self.navigationItem.standardAppearance = appearance;
+    self.navigationItem.scrollEdgeAppearance = appearance;
+    self.navigationItem.compactScrollEdgeAppearance = appearance;
+    [super viewDidLoad];
+}
+
+
+@end

+ 17 - 0
XCBCTreeLangDemo/RootViewController.xct

@@ -0,0 +1,17 @@
+export viewControllers
+
+NSArray viewControllers {
+    XCBCMultiTabPageViewController {
+        TabItemVCViewController { } {
+            ^text = "Tab1"
+        }
+        TabItemVCViewController { } {
+            ^text = "Tab2"
+        }
+        TabItemVCViewController { } {
+            ^text = "Tab3"
+        }
+    } {
+        ^defaultSelectionIndex = 1
+    }
+}

+ 18 - 0
XCBCTreeLangDemo/TabItemVCViewController.h

@@ -0,0 +1,18 @@
+//
+//  TabItemVCViewController.h
+//  XCBCTreeLangDemo
+//
+//  Created by xingcheng02 on 2023/8/22.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TabItemVCViewController : UIViewController
+
+@property (nonatomic, copy) NSString *text;
+
+@end
+
+NS_ASSUME_NONNULL_END

+ 40 - 0
XCBCTreeLangDemo/TabItemVCViewController.m

@@ -0,0 +1,40 @@
+//
+//  TabItemVCViewController.m
+//  XCBCTreeLangDemo
+//
+//  Created by xingcheng02 on 2023/8/22.
+//
+
+#import "TabItemVCViewController.h"
+#import <Masonry/Masonry.h>
+
+@interface TabItemVCViewController ()
+
+@property (nonatomic, strong) UILabel *testLabel;
+
+@end
+
+@implementation TabItemVCViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self.view addSubview:self.testLabel];
+    [self.testLabel mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop).with.offset(10);
+        make.centerX.equalTo(self.view.mas_centerX);
+    }];
+}
+
+- (UILabel *)testLabel {
+    if (!_testLabel) {
+        _testLabel = [UILabel new];
+    }
+    return _testLabel;
+}
+
+- (void)setText:(NSString *)text {
+    self.testLabel.text = text;
+    self.title = text;
+}
+
+@end

+ 0 - 22
XCBCTreeLangDemo/ViewController.m

@@ -1,22 +0,0 @@
-//
-//  ViewController.m
-//  XCBCTreeLangDemo
-//
-//  Created by xingcheng02 on 2023/8/22.
-//
-
-#import "ViewController.h"
-
-@interface ViewController ()
-
-@end
-
-@implementation ViewController
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-}
-
-
-@end

+ 10 - 0
XCBCTreeLangDemo/XCBCTreeLangDemo.entitlements

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>com.apple.security.app-sandbox</key>
+	<true/>
+	<key>com.apple.security.network.client</key>
+	<true/>
+</dict>
+</plist>

+ 2 - 0
XCBCTreeLangDemo/main.m

@@ -6,9 +6,11 @@
 //
 
 #import <UIKit/UIKit.h>
+#import <XCTreeLang/XCTreeLang.h>
 #import "AppDelegate.h"
 
 int main(int argc, char * argv[]) {
+    [XCTLEngine.shared enableAutoEvaluateForViewController];
     NSString * appDelegateClassName;
     @autoreleasepool {
         // Setup code that might create autoreleased objects goes here.