Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
MacJsonToModelFile
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈业泓
MacJsonToModelFile
Commits
6305b4d2
Commit
6305b4d2
authored
Feb 22, 2022
by
陈业泓
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
79b722d6
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1756 additions
and
0 deletions
+1756
-0
.DS_Store
.DS_Store
+0
-0
project.pbxproj
MacJsonToModelFile.xcodeproj/project.pbxproj
+388
-0
contents.xcworkspacedata
...le.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+7
-0
IDEWorkspaceChecks.plist
...project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
+8
-0
UserInterfaceState.xcuserstate
...ata/chenyehong.xcuserdatad/UserInterfaceState.xcuserstate
+0
-0
Breakpoints_v2.xcbkptlist
...enyehong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+6
-0
xcschememanagement.plist
...chenyehong.xcuserdatad/xcschemes/xcschememanagement.plist
+14
-0
.DS_Store
MacJsonToModelFile/.DS_Store
+0
-0
AppDelegate.swift
MacJsonToModelFile/AppDelegate.swift
+30
-0
Contents.json
...elFile/Assets.xcassets/AccentColor.colorset/Contents.json
+11
-0
Contents.json
...odelFile/Assets.xcassets/AppIcon.appiconset/Contents.json
+58
-0
Contents.json
MacJsonToModelFile/Assets.xcassets/Contents.json
+6
-0
Main.storyboard
MacJsonToModelFile/Base.lproj/Main.storyboard
+779
-0
FileModel.swift
MacJsonToModelFile/FileManager/FileModel.swift
+39
-0
FileUtil.swift
MacJsonToModelFile/FileManager/FileUtil.swift
+88
-0
ObjcUtil.swift
MacJsonToModelFile/FileManager/ObjcUtil.swift
+134
-0
MacJsonToModelFile.entitlements
MacJsonToModelFile/MacJsonToModelFile.entitlements
+5
-0
MacJsonToModelFile-Bridging-Header.h
...onToModelFile/OcCode/MacJsonToModelFile-Bridging-Header.h
+5
-0
OcTool.h
MacJsonToModelFile/OcCode/OcTool.h
+21
-0
OcTool.m
MacJsonToModelFile/OcCode/OcTool.m
+39
-0
ViewController.swift
MacJsonToModelFile/ViewController.swift
+118
-0
No files found.
.DS_Store
0 → 100644
View file @
6305b4d2
File added
MacJsonToModelFile.xcodeproj/project.pbxproj
0 → 100644
View file @
6305b4d2
// !$*UTF8*$!
{
archiveVersion
=
1
;
classes
=
{
};
objectVersion
=
55
;
objects
=
{
/* Begin PBXBuildFile section */
8130590027C330B000820D6A
/* AppDelegate.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
813058FF27C330B000820D6A
/* AppDelegate.swift */
;
};
8130590227C330B000820D6A
/* ViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
8130590127C330B000820D6A
/* ViewController.swift */
;
};
8130590427C330B400820D6A
/* Assets.xcassets in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
8130590327C330B400820D6A
/* Assets.xcassets */
;
};
8130590727C330B400820D6A
/* Main.storyboard in Resources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
8130590527C330B400820D6A
/* Main.storyboard */
;
};
813500D627C33F480082F0FD
/* FileUtil.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
813500D527C33F480082F0FD
/* FileUtil.swift */
;
};
813500D827C35FDE0082F0FD
/* FileModel.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
813500D727C35FDE0082F0FD
/* FileModel.swift */
;
};
813500DA27C37F710082F0FD
/* ObjcUtil.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
813500D927C37F710082F0FD
/* ObjcUtil.swift */
;
};
8187698127C4761A00FB6E9C
/* OcTool.m in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
8187698027C4761A00FB6E9C
/* OcTool.m */
;
};
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
813058FC27C330B000820D6A
/* MacJsonToModelFile.app */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.application
;
includeInIndex
=
0
;
path
=
MacJsonToModelFile.app
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
813058FF27C330B000820D6A
/* AppDelegate.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
AppDelegate.swift
;
sourceTree
=
"<group>"
;
};
8130590127C330B000820D6A
/* ViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ViewController.swift
;
sourceTree
=
"<group>"
;
};
8130590327C330B400820D6A
/* Assets.xcassets */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
folder.assetcatalog
;
path
=
Assets.xcassets
;
sourceTree
=
"<group>"
;
};
8130590627C330B400820D6A
/* Base */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
file.storyboard
;
name
=
Base
;
path
=
Base.lproj/Main.storyboard
;
sourceTree
=
"<group>"
;
};
8130590827C330B400820D6A
/* MacJsonToModelFile.entitlements */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
text.plist.entitlements
;
path
=
MacJsonToModelFile.entitlements
;
sourceTree
=
"<group>"
;
};
813500D527C33F480082F0FD
/* FileUtil.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
FileUtil.swift
;
sourceTree
=
"<group>"
;
};
813500D727C35FDE0082F0FD
/* FileModel.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
FileModel.swift
;
sourceTree
=
"<group>"
;
};
813500D927C37F710082F0FD
/* ObjcUtil.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
ObjcUtil.swift
;
sourceTree
=
"<group>"
;
};
8187697E27C4761A00FB6E9C
/* MacJsonToModelFile-Bridging-Header.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"MacJsonToModelFile-Bridging-Header.h"
;
sourceTree
=
"<group>"
;
};
8187697F27C4761A00FB6E9C
/* OcTool.h */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
OcTool.h
;
sourceTree
=
"<group>"
;
};
8187698027C4761A00FB6E9C
/* OcTool.m */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.c.objc
;
path
=
OcTool.m
;
sourceTree
=
"<group>"
;
};
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
813058F927C330B000820D6A
/* Frameworks */
=
{
isa
=
PBXFrameworksBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
);
runOnlyForDeploymentPostprocessing
=
0
;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
813058F327C330B000820D6A
=
{
isa
=
PBXGroup
;
children
=
(
813058FE27C330B000820D6A
/* MacJsonToModelFile */
,
813058FD27C330B000820D6A
/* Products */
,
);
sourceTree
=
"<group>"
;
};
813058FD27C330B000820D6A
/* Products */
=
{
isa
=
PBXGroup
;
children
=
(
813058FC27C330B000820D6A
/* MacJsonToModelFile.app */
,
);
name
=
Products
;
sourceTree
=
"<group>"
;
};
813058FE27C330B000820D6A
/* MacJsonToModelFile */
=
{
isa
=
PBXGroup
;
children
=
(
8187697D27C475F100FB6E9C
/* OcCode */
,
813500D227C33F0D0082F0FD
/* FileManager */
,
813058FF27C330B000820D6A
/* AppDelegate.swift */
,
8130590127C330B000820D6A
/* ViewController.swift */
,
8130590327C330B400820D6A
/* Assets.xcassets */
,
8130590527C330B400820D6A
/* Main.storyboard */
,
8130590827C330B400820D6A
/* MacJsonToModelFile.entitlements */
,
);
path
=
MacJsonToModelFile
;
sourceTree
=
"<group>"
;
};
813500D227C33F0D0082F0FD
/* FileManager */
=
{
isa
=
PBXGroup
;
children
=
(
813500D527C33F480082F0FD
/* FileUtil.swift */
,
813500D727C35FDE0082F0FD
/* FileModel.swift */
,
813500D927C37F710082F0FD
/* ObjcUtil.swift */
,
);
path
=
FileManager
;
sourceTree
=
"<group>"
;
};
8187697D27C475F100FB6E9C
/* OcCode */
=
{
isa
=
PBXGroup
;
children
=
(
8187697F27C4761A00FB6E9C
/* OcTool.h */
,
8187698027C4761A00FB6E9C
/* OcTool.m */
,
8187697E27C4761A00FB6E9C
/* MacJsonToModelFile-Bridging-Header.h */
,
);
path
=
OcCode
;
sourceTree
=
"<group>"
;
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
813058FB27C330B000820D6A
/* MacJsonToModelFile */
=
{
isa
=
PBXNativeTarget
;
buildConfigurationList
=
8130590B27C330B400820D6A
/* Build configuration list for PBXNativeTarget "MacJsonToModelFile" */
;
buildPhases
=
(
813058F827C330B000820D6A
/* Sources */
,
813058F927C330B000820D6A
/* Frameworks */
,
813058FA27C330B000820D6A
/* Resources */
,
);
buildRules
=
(
);
dependencies
=
(
);
name
=
MacJsonToModelFile
;
productName
=
MacJsonToModelFile
;
productReference
=
813058FC27C330B000820D6A
/* MacJsonToModelFile.app */
;
productType
=
"com.apple.product-type.application"
;
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
813058F427C330B000820D6A
/* Project object */
=
{
isa
=
PBXProject
;
attributes
=
{
BuildIndependentTargetsInParallel
=
1
;
LastSwiftUpdateCheck
=
1320
;
LastUpgradeCheck
=
1320
;
TargetAttributes
=
{
813058FB27C330B000820D6A
=
{
CreatedOnToolsVersion
=
13.2.1
;
LastSwiftMigration
=
1320
;
};
};
};
buildConfigurationList
=
813058F727C330B000820D6A
/* Build configuration list for PBXProject "MacJsonToModelFile" */
;
compatibilityVersion
=
"Xcode 13.0"
;
developmentRegion
=
en
;
hasScannedForEncodings
=
0
;
knownRegions
=
(
en
,
Base
,
);
mainGroup
=
813058F327C330B000820D6A
;
productRefGroup
=
813058FD27C330B000820D6A
/* Products */
;
projectDirPath
=
""
;
projectRoot
=
""
;
targets
=
(
813058FB27C330B000820D6A
/* MacJsonToModelFile */
,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
813058FA27C330B000820D6A
/* Resources */
=
{
isa
=
PBXResourcesBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
8130590427C330B400820D6A
/* Assets.xcassets in Resources */
,
8130590727C330B400820D6A
/* Main.storyboard in Resources */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
813058F827C330B000820D6A
/* Sources */
=
{
isa
=
PBXSourcesBuildPhase
;
buildActionMask
=
2147483647
;
files
=
(
813500D627C33F480082F0FD
/* FileUtil.swift in Sources */
,
8130590227C330B000820D6A
/* ViewController.swift in Sources */
,
8130590027C330B000820D6A
/* AppDelegate.swift in Sources */
,
813500DA27C37F710082F0FD
/* ObjcUtil.swift in Sources */
,
813500D827C35FDE0082F0FD
/* FileModel.swift in Sources */
,
8187698127C4761A00FB6E9C
/* OcTool.m in Sources */
,
);
runOnlyForDeploymentPostprocessing
=
0
;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
8130590527C330B400820D6A
/* Main.storyboard */
=
{
isa
=
PBXVariantGroup
;
children
=
(
8130590627C330B400820D6A
/* Base */
,
);
name
=
Main.storyboard
;
sourceTree
=
"<group>"
;
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
8130590927C330B400820D6A
/* Debug */
=
{
isa
=
XCBuildConfiguration
;
buildSettings
=
{
ALWAYS_SEARCH_USER_PATHS
=
NO
;
CLANG_ANALYZER_NONNULL
=
YES
;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION
=
YES_AGGRESSIVE
;
CLANG_CXX_LANGUAGE_STANDARD
=
"gnu++17"
;
CLANG_CXX_LIBRARY
=
"libc++"
;
CLANG_ENABLE_MODULES
=
YES
;
CLANG_ENABLE_OBJC_ARC
=
YES
;
CLANG_ENABLE_OBJC_WEAK
=
YES
;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
=
YES
;
CLANG_WARN_BOOL_CONVERSION
=
YES
;
CLANG_WARN_COMMA
=
YES
;
CLANG_WARN_CONSTANT_CONVERSION
=
YES
;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS
=
YES
;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE
=
YES_ERROR
;
CLANG_WARN_DOCUMENTATION_COMMENTS
=
YES
;
CLANG_WARN_EMPTY_BODY
=
YES
;
CLANG_WARN_ENUM_CONVERSION
=
YES
;
CLANG_WARN_INFINITE_RECURSION
=
YES
;
CLANG_WARN_INT_CONVERSION
=
YES
;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION
=
YES
;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF
=
YES
;
CLANG_WARN_OBJC_LITERAL_CONVERSION
=
YES
;
CLANG_WARN_OBJC_ROOT_CLASS
=
YES_ERROR
;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER
=
YES
;
CLANG_WARN_RANGE_LOOP_ANALYSIS
=
YES
;
CLANG_WARN_STRICT_PROTOTYPES
=
YES
;
CLANG_WARN_SUSPICIOUS_MOVE
=
YES
;
CLANG_WARN_UNGUARDED_AVAILABILITY
=
YES_AGGRESSIVE
;
CLANG_WARN_UNREACHABLE_CODE
=
YES
;
CLANG_WARN__DUPLICATE_METHOD_MATCH
=
YES
;
COPY_PHASE_STRIP
=
NO
;
DEBUG_INFORMATION_FORMAT
=
dwarf
;
ENABLE_STRICT_OBJC_MSGSEND
=
YES
;
ENABLE_TESTABILITY
=
YES
;
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GCC_DYNAMIC_NO_PIC
=
NO
;
GCC_NO_COMMON_BLOCKS
=
YES
;
GCC_OPTIMIZATION_LEVEL
=
0
;
GCC_PREPROCESSOR_DEFINITIONS
=
(
"DEBUG=1"
,
"$(inherited)"
,
);
GCC_WARN_64_TO_32_BIT_CONVERSION
=
YES
;
GCC_WARN_ABOUT_RETURN_TYPE
=
YES_ERROR
;
GCC_WARN_UNDECLARED_SELECTOR
=
YES
;
GCC_WARN_UNINITIALIZED_AUTOS
=
YES_AGGRESSIVE
;
GCC_WARN_UNUSED_FUNCTION
=
YES
;
GCC_WARN_UNUSED_VARIABLE
=
YES
;
MACOSX_DEPLOYMENT_TARGET
=
11.6
;
MTL_ENABLE_DEBUG_INFO
=
INCLUDE_SOURCE
;
MTL_FAST_MATH
=
YES
;
ONLY_ACTIVE_ARCH
=
YES
;
SDKROOT
=
macosx
;
SWIFT_ACTIVE_COMPILATION_CONDITIONS
=
DEBUG
;
SWIFT_OPTIMIZATION_LEVEL
=
"-Onone"
;
};
name
=
Debug
;
};
8130590A27C330B400820D6A
/* Release */
=
{
isa
=
XCBuildConfiguration
;
buildSettings
=
{
ALWAYS_SEARCH_USER_PATHS
=
NO
;
CLANG_ANALYZER_NONNULL
=
YES
;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION
=
YES_AGGRESSIVE
;
CLANG_CXX_LANGUAGE_STANDARD
=
"gnu++17"
;
CLANG_CXX_LIBRARY
=
"libc++"
;
CLANG_ENABLE_MODULES
=
YES
;
CLANG_ENABLE_OBJC_ARC
=
YES
;
CLANG_ENABLE_OBJC_WEAK
=
YES
;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING
=
YES
;
CLANG_WARN_BOOL_CONVERSION
=
YES
;
CLANG_WARN_COMMA
=
YES
;
CLANG_WARN_CONSTANT_CONVERSION
=
YES
;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS
=
YES
;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE
=
YES_ERROR
;
CLANG_WARN_DOCUMENTATION_COMMENTS
=
YES
;
CLANG_WARN_EMPTY_BODY
=
YES
;
CLANG_WARN_ENUM_CONVERSION
=
YES
;
CLANG_WARN_INFINITE_RECURSION
=
YES
;
CLANG_WARN_INT_CONVERSION
=
YES
;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION
=
YES
;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF
=
YES
;
CLANG_WARN_OBJC_LITERAL_CONVERSION
=
YES
;
CLANG_WARN_OBJC_ROOT_CLASS
=
YES_ERROR
;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER
=
YES
;
CLANG_WARN_RANGE_LOOP_ANALYSIS
=
YES
;
CLANG_WARN_STRICT_PROTOTYPES
=
YES
;
CLANG_WARN_SUSPICIOUS_MOVE
=
YES
;
CLANG_WARN_UNGUARDED_AVAILABILITY
=
YES_AGGRESSIVE
;
CLANG_WARN_UNREACHABLE_CODE
=
YES
;
CLANG_WARN__DUPLICATE_METHOD_MATCH
=
YES
;
COPY_PHASE_STRIP
=
NO
;
DEBUG_INFORMATION_FORMAT
=
"dwarf-with-dsym"
;
ENABLE_NS_ASSERTIONS
=
NO
;
ENABLE_STRICT_OBJC_MSGSEND
=
YES
;
GCC_C_LANGUAGE_STANDARD
=
gnu11
;
GCC_NO_COMMON_BLOCKS
=
YES
;
GCC_WARN_64_TO_32_BIT_CONVERSION
=
YES
;
GCC_WARN_ABOUT_RETURN_TYPE
=
YES_ERROR
;
GCC_WARN_UNDECLARED_SELECTOR
=
YES
;
GCC_WARN_UNINITIALIZED_AUTOS
=
YES_AGGRESSIVE
;
GCC_WARN_UNUSED_FUNCTION
=
YES
;
GCC_WARN_UNUSED_VARIABLE
=
YES
;
MACOSX_DEPLOYMENT_TARGET
=
11.6
;
MTL_ENABLE_DEBUG_INFO
=
NO
;
MTL_FAST_MATH
=
YES
;
SDKROOT
=
macosx
;
SWIFT_COMPILATION_MODE
=
wholemodule
;
SWIFT_OPTIMIZATION_LEVEL
=
"-O"
;
};
name
=
Release
;
};
8130590C27C330B400820D6A
/* Debug */
=
{
isa
=
XCBuildConfiguration
;
buildSettings
=
{
ASSETCATALOG_COMPILER_APPICON_NAME
=
AppIcon
;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME
=
AccentColor
;
CLANG_ENABLE_MODULES
=
YES
;
CODE_SIGN_ENTITLEMENTS
=
MacJsonToModelFile/MacJsonToModelFile.entitlements
;
CODE_SIGN_STYLE
=
Automatic
;
COMBINE_HIDPI_IMAGES
=
YES
;
CURRENT_PROJECT_VERSION
=
1
;
DEVELOPMENT_TEAM
=
C77C4Z7YUK
;
ENABLE_HARDENED_RUNTIME
=
YES
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_KEY_NSHumanReadableCopyright
=
""
;
INFOPLIST_KEY_NSMainStoryboardFile
=
Main
;
INFOPLIST_KEY_NSPrincipalClass
=
NSApplication
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/../Frameworks"
,
);
MARKETING_VERSION
=
1.0
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.syc.saas.MacJsonToModelFile
;
PRODUCT_NAME
=
"$(TARGET_NAME)"
;
SWIFT_EMIT_LOC_STRINGS
=
YES
;
SWIFT_OBJC_BRIDGING_HEADER
=
"MacJsonToModelFile/OcCode/MacJsonToModelFile-Bridging-Header.h"
;
SWIFT_OPTIMIZATION_LEVEL
=
"-Onone"
;
SWIFT_VERSION
=
5.0
;
};
name
=
Debug
;
};
8130590D27C330B400820D6A
/* Release */
=
{
isa
=
XCBuildConfiguration
;
buildSettings
=
{
ASSETCATALOG_COMPILER_APPICON_NAME
=
AppIcon
;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME
=
AccentColor
;
CLANG_ENABLE_MODULES
=
YES
;
CODE_SIGN_ENTITLEMENTS
=
MacJsonToModelFile/MacJsonToModelFile.entitlements
;
CODE_SIGN_STYLE
=
Automatic
;
COMBINE_HIDPI_IMAGES
=
YES
;
CURRENT_PROJECT_VERSION
=
1
;
DEVELOPMENT_TEAM
=
C77C4Z7YUK
;
ENABLE_HARDENED_RUNTIME
=
YES
;
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_KEY_NSHumanReadableCopyright
=
""
;
INFOPLIST_KEY_NSMainStoryboardFile
=
Main
;
INFOPLIST_KEY_NSPrincipalClass
=
NSApplication
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/../Frameworks"
,
);
MARKETING_VERSION
=
1.0
;
PRODUCT_BUNDLE_IDENTIFIER
=
com.syc.saas.MacJsonToModelFile
;
PRODUCT_NAME
=
"$(TARGET_NAME)"
;
SWIFT_EMIT_LOC_STRINGS
=
YES
;
SWIFT_OBJC_BRIDGING_HEADER
=
"MacJsonToModelFile/OcCode/MacJsonToModelFile-Bridging-Header.h"
;
SWIFT_VERSION
=
5.0
;
};
name
=
Release
;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
813058F727C330B000820D6A
/* Build configuration list for PBXProject "MacJsonToModelFile" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
8130590927C330B400820D6A
/* Debug */
,
8130590A27C330B400820D6A
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
8130590B27C330B400820D6A
/* Build configuration list for PBXNativeTarget "MacJsonToModelFile" */
=
{
isa
=
XCConfigurationList
;
buildConfigurations
=
(
8130590C27C330B400820D6A
/* Debug */
,
8130590D27C330B400820D6A
/* Release */
,
);
defaultConfigurationIsVisible
=
0
;
defaultConfigurationName
=
Release
;
};
/* End XCConfigurationList section */
};
rootObject
=
813058F427C330B000820D6A
/* Project object */
;
}
MacJsonToModelFile.xcodeproj/project.xcworkspace/contents.xcworkspacedata
0 → 100644
View file @
6305b4d2
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version =
"1.0"
>
<FileRef
location =
"self:"
>
</FileRef>
</Workspace>
MacJsonToModelFile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
0 → 100644
View file @
6305b4d2
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
IDEDidComputeMac32BitWarning
<
/k
e
y
>
<
tru
e
/
>
<
/
d
i
c
t
>
<
/plist
>
MacJsonToModelFile.xcodeproj/project.xcworkspace/xcuserdata/chenyehong.xcuserdatad/UserInterfaceState.xcuserstate
0 → 100644
View file @
6305b4d2
File added
MacJsonToModelFile.xcodeproj/xcuserdata/chenyehong.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
0 → 100644
View file @
6305b4d2
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid =
"0DEDF84D-949E-48C0-A56B-73E77D9298BD"
type =
"1"
version =
"2.0"
>
</Bucket>
MacJsonToModelFile.xcodeproj/xcuserdata/chenyehong.xcuserdatad/xcschemes/xcschememanagement.plist
0 → 100644
View file @
6305b4d2
<
?xml
v
e
rsion="
1
.
0
"
e
n
c
o
d
ing="UT
F
-
8
"?
>
<
!
D
O
C
TYP
E
plist
PU
B
LI
C
"-//
A
ppl
e
//
D
T
D
PLIST
1
.
0
//
E
N"
"http://www.
a
ppl
e
.
c
om/
D
T
D
s/Prop
e
rtyList-
1
.
0
.
d
t
d
"
>
<
plist
v
e
rsion="
1
.
0
"
>
<
d
i
c
t
>
<
k
e
y
>
SchemeUserState
<
/k
e
y
>
<
d
i
c
t
>
<
k
e
y
>
MacJsonToModelFile.xcscheme_
^#
shared
#^
_
<
/k
e
y
>
<
d
i
c
t
>
<
k
e
y
>
orderHint
<
/k
e
y
>
<
int
e
g
e
r
>
0
<
/int
e
g
e
r
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
/
d
i
c
t
>
<
/plist
>
MacJsonToModelFile/.DS_Store
0 → 100644
View file @
6305b4d2
File added
MacJsonToModelFile/AppDelegate.swift
0 → 100644
View file @
6305b4d2
//
// AppDelegate.swift
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/21.
//
import
Cocoa
@main
class
AppDelegate
:
NSObject
,
NSApplicationDelegate
{
func
applicationDidFinishLaunching
(
_
aNotification
:
Notification
)
{
// Insert code here to initialize your application
}
func
applicationWillTerminate
(
_
aNotification
:
Notification
)
{
// Insert code here to tear down your application
}
func
applicationSupportsSecureRestorableState
(
_
app
:
NSApplication
)
->
Bool
{
return
true
}
}
MacJsonToModelFile/Assets.xcassets/AccentColor.colorset/Contents.json
0 → 100644
View file @
6305b4d2
{
"colors"
:
[
{
"idiom"
:
"universal"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
MacJsonToModelFile/Assets.xcassets/AppIcon.appiconset/Contents.json
0 → 100644
View file @
6305b4d2
{
"images"
:
[
{
"idiom"
:
"mac"
,
"scale"
:
"1x"
,
"size"
:
"16x16"
},
{
"idiom"
:
"mac"
,
"scale"
:
"2x"
,
"size"
:
"16x16"
},
{
"idiom"
:
"mac"
,
"scale"
:
"1x"
,
"size"
:
"32x32"
},
{
"idiom"
:
"mac"
,
"scale"
:
"2x"
,
"size"
:
"32x32"
},
{
"idiom"
:
"mac"
,
"scale"
:
"1x"
,
"size"
:
"128x128"
},
{
"idiom"
:
"mac"
,
"scale"
:
"2x"
,
"size"
:
"128x128"
},
{
"idiom"
:
"mac"
,
"scale"
:
"1x"
,
"size"
:
"256x256"
},
{
"idiom"
:
"mac"
,
"scale"
:
"2x"
,
"size"
:
"256x256"
},
{
"idiom"
:
"mac"
,
"scale"
:
"1x"
,
"size"
:
"512x512"
},
{
"idiom"
:
"mac"
,
"scale"
:
"2x"
,
"size"
:
"512x512"
}
],
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
MacJsonToModelFile/Assets.xcassets/Contents.json
0 → 100644
View file @
6305b4d2
{
"info"
:
{
"author"
:
"xcode"
,
"version"
:
1
}
}
MacJsonToModelFile/Base.lproj/Main.storyboard
0 → 100644
View file @
6305b4d2
<?xml version="1.0" encoding="UTF-8"?>
<document
type=
"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB"
version=
"3.0"
toolsVersion=
"19529"
targetRuntime=
"MacOSX.Cocoa"
propertyAccessControl=
"none"
useAutolayout=
"YES"
initialViewController=
"B8D-0N-5wS"
>
<dependencies>
<deployment
identifier=
"macosx"
/>
<plugIn
identifier=
"com.apple.InterfaceBuilder.CocoaPlugin"
version=
"19529"
/>
<capability
name=
"documents saved in the Xcode 8 format"
minToolsVersion=
"8.0"
/>
</dependencies>
<scenes>
<!--Application-->
<scene
sceneID=
"JPo-4y-FX3"
>
<objects>
<application
id=
"hnw-xV-0zn"
sceneMemberID=
"viewController"
>
<menu
key=
"mainMenu"
title=
"Main Menu"
systemMenu=
"main"
id=
"AYu-sK-qS6"
>
<items>
<menuItem
title=
"MacJsonToModelFile"
id=
"1Xt-HY-uBw"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"MacJsonToModelFile"
systemMenu=
"apple"
id=
"uQy-DD-JDr"
>
<items>
<menuItem
title=
"About MacJsonToModelFile"
id=
"5kV-Vb-QxS"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"orderFrontStandardAboutPanel:"
target=
"Ady-hI-5gd"
id=
"Exp-CZ-Vem"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"VOq-y0-SEH"
/>
<menuItem
title=
"Preferences…"
keyEquivalent=
","
id=
"BOF-NM-1cW"
/>
<menuItem
isSeparatorItem=
"YES"
id=
"wFC-TO-SCJ"
/>
<menuItem
title=
"Services"
id=
"NMo-om-nkz"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Services"
systemMenu=
"services"
id=
"hz9-B4-Xy5"
/>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"4je-JR-u6R"
/>
<menuItem
title=
"Hide MacJsonToModelFile"
keyEquivalent=
"h"
id=
"Olw-nP-bQN"
>
<connections>
<action
selector=
"hide:"
target=
"Ady-hI-5gd"
id=
"PnN-Uc-m68"
/>
</connections>
</menuItem>
<menuItem
title=
"Hide Others"
keyEquivalent=
"h"
id=
"Vdr-fp-XzO"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"hideOtherApplications:"
target=
"Ady-hI-5gd"
id=
"VT4-aY-XCT"
/>
</connections>
</menuItem>
<menuItem
title=
"Show All"
id=
"Kd2-mp-pUS"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"unhideAllApplications:"
target=
"Ady-hI-5gd"
id=
"Dhg-Le-xox"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"kCx-OE-vgT"
/>
<menuItem
title=
"Quit MacJsonToModelFile"
keyEquivalent=
"q"
id=
"4sb-4s-VLi"
>
<connections>
<action
selector=
"terminate:"
target=
"Ady-hI-5gd"
id=
"Te7-pn-YzF"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"File"
id=
"dMs-cI-mzQ"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"File"
id=
"bib-Uj-vzu"
>
<items>
<menuItem
title=
"New"
keyEquivalent=
"n"
id=
"Was-JA-tGl"
>
<connections>
<action
selector=
"newDocument:"
target=
"Ady-hI-5gd"
id=
"4Si-XN-c54"
/>
</connections>
</menuItem>
<menuItem
title=
"Open…"
keyEquivalent=
"o"
id=
"IAo-SY-fd9"
>
<connections>
<action
selector=
"openDocument:"
target=
"Ady-hI-5gd"
id=
"bVn-NM-KNZ"
/>
</connections>
</menuItem>
<menuItem
title=
"Open Recent"
id=
"tXI-mr-wws"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Open Recent"
systemMenu=
"recentDocuments"
id=
"oas-Oc-fiZ"
>
<items>
<menuItem
title=
"Clear Menu"
id=
"vNY-rz-j42"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"clearRecentDocuments:"
target=
"Ady-hI-5gd"
id=
"Daa-9d-B3U"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"m54-Is-iLE"
/>
<menuItem
title=
"Close"
keyEquivalent=
"w"
id=
"DVo-aG-piG"
>
<connections>
<action
selector=
"performClose:"
target=
"Ady-hI-5gd"
id=
"HmO-Ls-i7Q"
/>
</connections>
</menuItem>
<menuItem
title=
"Save…"
keyEquivalent=
"s"
id=
"pxx-59-PXV"
>
<connections>
<action
selector=
"saveDocument:"
target=
"Ady-hI-5gd"
id=
"teZ-XB-qJY"
/>
</connections>
</menuItem>
<menuItem
title=
"Save As…"
keyEquivalent=
"S"
id=
"Bw7-FT-i3A"
>
<connections>
<action
selector=
"saveDocumentAs:"
target=
"Ady-hI-5gd"
id=
"mDf-zr-I0C"
/>
</connections>
</menuItem>
<menuItem
title=
"Revert to Saved"
keyEquivalent=
"r"
id=
"KaW-ft-85H"
>
<connections>
<action
selector=
"revertDocumentToSaved:"
target=
"Ady-hI-5gd"
id=
"iJ3-Pv-kwq"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"aJh-i4-bef"
/>
<menuItem
title=
"Page Setup…"
keyEquivalent=
"P"
id=
"qIS-W8-SiK"
>
<modifierMask
key=
"keyEquivalentModifierMask"
shift=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"runPageLayout:"
target=
"Ady-hI-5gd"
id=
"Din-rz-gC5"
/>
</connections>
</menuItem>
<menuItem
title=
"Print…"
keyEquivalent=
"p"
id=
"aTl-1u-JFS"
>
<connections>
<action
selector=
"print:"
target=
"Ady-hI-5gd"
id=
"qaZ-4w-aoO"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Edit"
id=
"5QF-Oa-p0T"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Edit"
id=
"W48-6f-4Dl"
>
<items>
<menuItem
title=
"Undo"
keyEquivalent=
"z"
id=
"dRJ-4n-Yzg"
>
<connections>
<action
selector=
"undo:"
target=
"Ady-hI-5gd"
id=
"M6e-cu-g7V"
/>
</connections>
</menuItem>
<menuItem
title=
"Redo"
keyEquivalent=
"Z"
id=
"6dh-zS-Vam"
>
<connections>
<action
selector=
"redo:"
target=
"Ady-hI-5gd"
id=
"oIA-Rs-6OD"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"WRV-NI-Exz"
/>
<menuItem
title=
"Cut"
keyEquivalent=
"x"
id=
"uRl-iY-unG"
>
<connections>
<action
selector=
"cut:"
target=
"Ady-hI-5gd"
id=
"YJe-68-I9s"
/>
</connections>
</menuItem>
<menuItem
title=
"Copy"
keyEquivalent=
"c"
id=
"x3v-GG-iWU"
>
<connections>
<action
selector=
"copy:"
target=
"Ady-hI-5gd"
id=
"G1f-GL-Joy"
/>
</connections>
</menuItem>
<menuItem
title=
"Paste"
keyEquivalent=
"v"
id=
"gVA-U4-sdL"
>
<connections>
<action
selector=
"paste:"
target=
"Ady-hI-5gd"
id=
"UvS-8e-Qdg"
/>
</connections>
</menuItem>
<menuItem
title=
"Paste and Match Style"
keyEquivalent=
"V"
id=
"WeT-3V-zwk"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"pasteAsPlainText:"
target=
"Ady-hI-5gd"
id=
"cEh-KX-wJQ"
/>
</connections>
</menuItem>
<menuItem
title=
"Delete"
id=
"pa3-QI-u2k"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"delete:"
target=
"Ady-hI-5gd"
id=
"0Mk-Ml-PaM"
/>
</connections>
</menuItem>
<menuItem
title=
"Select All"
keyEquivalent=
"a"
id=
"Ruw-6m-B2m"
>
<connections>
<action
selector=
"selectAll:"
target=
"Ady-hI-5gd"
id=
"VNm-Mi-diN"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"uyl-h8-XO2"
/>
<menuItem
title=
"Find"
id=
"4EN-yA-p0u"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Find"
id=
"1b7-l0-nxx"
>
<items>
<menuItem
title=
"Find…"
tag=
"1"
keyEquivalent=
"f"
id=
"Xz5-n4-O0W"
>
<connections>
<action
selector=
"performFindPanelAction:"
target=
"Ady-hI-5gd"
id=
"cD7-Qs-BN4"
/>
</connections>
</menuItem>
<menuItem
title=
"Find and Replace…"
tag=
"12"
keyEquivalent=
"f"
id=
"YEy-JH-Tfz"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"performFindPanelAction:"
target=
"Ady-hI-5gd"
id=
"WD3-Gg-5AJ"
/>
</connections>
</menuItem>
<menuItem
title=
"Find Next"
tag=
"2"
keyEquivalent=
"g"
id=
"q09-fT-Sye"
>
<connections>
<action
selector=
"performFindPanelAction:"
target=
"Ady-hI-5gd"
id=
"NDo-RZ-v9R"
/>
</connections>
</menuItem>
<menuItem
title=
"Find Previous"
tag=
"3"
keyEquivalent=
"G"
id=
"OwM-mh-QMV"
>
<connections>
<action
selector=
"performFindPanelAction:"
target=
"Ady-hI-5gd"
id=
"HOh-sY-3ay"
/>
</connections>
</menuItem>
<menuItem
title=
"Use Selection for Find"
tag=
"7"
keyEquivalent=
"e"
id=
"buJ-ug-pKt"
>
<connections>
<action
selector=
"performFindPanelAction:"
target=
"Ady-hI-5gd"
id=
"U76-nv-p5D"
/>
</connections>
</menuItem>
<menuItem
title=
"Jump to Selection"
keyEquivalent=
"j"
id=
"S0p-oC-mLd"
>
<connections>
<action
selector=
"centerSelectionInVisibleArea:"
target=
"Ady-hI-5gd"
id=
"IOG-6D-g5B"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Spelling and Grammar"
id=
"Dv1-io-Yv7"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Spelling"
id=
"3IN-sU-3Bg"
>
<items>
<menuItem
title=
"Show Spelling and Grammar"
keyEquivalent=
":"
id=
"HFo-cy-zxI"
>
<connections>
<action
selector=
"showGuessPanel:"
target=
"Ady-hI-5gd"
id=
"vFj-Ks-hy3"
/>
</connections>
</menuItem>
<menuItem
title=
"Check Document Now"
keyEquivalent=
";"
id=
"hz2-CU-CR7"
>
<connections>
<action
selector=
"checkSpelling:"
target=
"Ady-hI-5gd"
id=
"fz7-VC-reM"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"bNw-od-mp5"
/>
<menuItem
title=
"Check Spelling While Typing"
id=
"rbD-Rh-wIN"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleContinuousSpellChecking:"
target=
"Ady-hI-5gd"
id=
"7w6-Qz-0kB"
/>
</connections>
</menuItem>
<menuItem
title=
"Check Grammar With Spelling"
id=
"mK6-2p-4JG"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleGrammarChecking:"
target=
"Ady-hI-5gd"
id=
"muD-Qn-j4w"
/>
</connections>
</menuItem>
<menuItem
title=
"Correct Spelling Automatically"
id=
"78Y-hA-62v"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticSpellingCorrection:"
target=
"Ady-hI-5gd"
id=
"2lM-Qi-WAP"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Substitutions"
id=
"9ic-FL-obx"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Substitutions"
id=
"FeM-D8-WVr"
>
<items>
<menuItem
title=
"Show Substitutions"
id=
"z6F-FW-3nz"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"orderFrontSubstitutionsPanel:"
target=
"Ady-hI-5gd"
id=
"oku-mr-iSq"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"gPx-C9-uUO"
/>
<menuItem
title=
"Smart Copy/Paste"
id=
"9yt-4B-nSM"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleSmartInsertDelete:"
target=
"Ady-hI-5gd"
id=
"3IJ-Se-DZD"
/>
</connections>
</menuItem>
<menuItem
title=
"Smart Quotes"
id=
"hQb-2v-fYv"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticQuoteSubstitution:"
target=
"Ady-hI-5gd"
id=
"ptq-xd-QOA"
/>
</connections>
</menuItem>
<menuItem
title=
"Smart Dashes"
id=
"rgM-f4-ycn"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticDashSubstitution:"
target=
"Ady-hI-5gd"
id=
"oCt-pO-9gS"
/>
</connections>
</menuItem>
<menuItem
title=
"Smart Links"
id=
"cwL-P1-jid"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticLinkDetection:"
target=
"Ady-hI-5gd"
id=
"Gip-E3-Fov"
/>
</connections>
</menuItem>
<menuItem
title=
"Data Detectors"
id=
"tRr-pd-1PS"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticDataDetection:"
target=
"Ady-hI-5gd"
id=
"R1I-Nq-Kbl"
/>
</connections>
</menuItem>
<menuItem
title=
"Text Replacement"
id=
"HFQ-gK-NFA"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleAutomaticTextReplacement:"
target=
"Ady-hI-5gd"
id=
"DvP-Fe-Py6"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Transformations"
id=
"2oI-Rn-ZJC"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Transformations"
id=
"c8a-y6-VQd"
>
<items>
<menuItem
title=
"Make Upper Case"
id=
"vmV-6d-7jI"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"uppercaseWord:"
target=
"Ady-hI-5gd"
id=
"sPh-Tk-edu"
/>
</connections>
</menuItem>
<menuItem
title=
"Make Lower Case"
id=
"d9M-CD-aMd"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"lowercaseWord:"
target=
"Ady-hI-5gd"
id=
"iUZ-b5-hil"
/>
</connections>
</menuItem>
<menuItem
title=
"Capitalize"
id=
"UEZ-Bs-lqG"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"capitalizeWord:"
target=
"Ady-hI-5gd"
id=
"26H-TL-nsh"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Speech"
id=
"xrE-MZ-jX0"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Speech"
id=
"3rS-ZA-NoH"
>
<items>
<menuItem
title=
"Start Speaking"
id=
"Ynk-f8-cLZ"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"startSpeaking:"
target=
"Ady-hI-5gd"
id=
"654-Ng-kyl"
/>
</connections>
</menuItem>
<menuItem
title=
"Stop Speaking"
id=
"Oyz-dy-DGm"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"stopSpeaking:"
target=
"Ady-hI-5gd"
id=
"dX8-6p-jy9"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Format"
id=
"jxT-CU-nIS"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Format"
id=
"GEO-Iw-cKr"
>
<items>
<menuItem
title=
"Font"
id=
"Gi5-1S-RQB"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Font"
systemMenu=
"font"
id=
"aXa-aM-Jaq"
>
<items>
<menuItem
title=
"Show Fonts"
keyEquivalent=
"t"
id=
"Q5e-8K-NDq"
>
<connections>
<action
selector=
"orderFrontFontPanel:"
target=
"YLy-65-1bz"
id=
"WHr-nq-2xA"
/>
</connections>
</menuItem>
<menuItem
title=
"Bold"
tag=
"2"
keyEquivalent=
"b"
id=
"GB9-OM-e27"
>
<connections>
<action
selector=
"addFontTrait:"
target=
"YLy-65-1bz"
id=
"hqk-hr-sYV"
/>
</connections>
</menuItem>
<menuItem
title=
"Italic"
tag=
"1"
keyEquivalent=
"i"
id=
"Vjx-xi-njq"
>
<connections>
<action
selector=
"addFontTrait:"
target=
"YLy-65-1bz"
id=
"IHV-OB-c03"
/>
</connections>
</menuItem>
<menuItem
title=
"Underline"
keyEquivalent=
"u"
id=
"WRG-CD-K1S"
>
<connections>
<action
selector=
"underline:"
target=
"Ady-hI-5gd"
id=
"FYS-2b-JAY"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"5gT-KC-WSO"
/>
<menuItem
title=
"Bigger"
tag=
"3"
keyEquivalent=
"+"
id=
"Ptp-SP-VEL"
>
<connections>
<action
selector=
"modifyFont:"
target=
"YLy-65-1bz"
id=
"Uc7-di-UnL"
/>
</connections>
</menuItem>
<menuItem
title=
"Smaller"
tag=
"4"
keyEquivalent=
"-"
id=
"i1d-Er-qST"
>
<connections>
<action
selector=
"modifyFont:"
target=
"YLy-65-1bz"
id=
"HcX-Lf-eNd"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"kx3-Dk-x3B"
/>
<menuItem
title=
"Kern"
id=
"jBQ-r6-VK2"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Kern"
id=
"tlD-Oa-oAM"
>
<items>
<menuItem
title=
"Use Default"
id=
"GUa-eO-cwY"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"useStandardKerning:"
target=
"Ady-hI-5gd"
id=
"6dk-9l-Ckg"
/>
</connections>
</menuItem>
<menuItem
title=
"Use None"
id=
"cDB-IK-hbR"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"turnOffKerning:"
target=
"Ady-hI-5gd"
id=
"U8a-gz-Maa"
/>
</connections>
</menuItem>
<menuItem
title=
"Tighten"
id=
"46P-cB-AYj"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"tightenKerning:"
target=
"Ady-hI-5gd"
id=
"hr7-Nz-8ro"
/>
</connections>
</menuItem>
<menuItem
title=
"Loosen"
id=
"ogc-rX-tC1"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"loosenKerning:"
target=
"Ady-hI-5gd"
id=
"8i4-f9-FKE"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Ligatures"
id=
"o6e-r0-MWq"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Ligatures"
id=
"w0m-vy-SC9"
>
<items>
<menuItem
title=
"Use Default"
id=
"agt-UL-0e3"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"useStandardLigatures:"
target=
"Ady-hI-5gd"
id=
"7uR-wd-Dx6"
/>
</connections>
</menuItem>
<menuItem
title=
"Use None"
id=
"J7y-lM-qPV"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"turnOffLigatures:"
target=
"Ady-hI-5gd"
id=
"iX2-gA-Ilz"
/>
</connections>
</menuItem>
<menuItem
title=
"Use All"
id=
"xQD-1f-W4t"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"useAllLigatures:"
target=
"Ady-hI-5gd"
id=
"KcB-kA-TuK"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Baseline"
id=
"OaQ-X3-Vso"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Baseline"
id=
"ijk-EB-dga"
>
<items>
<menuItem
title=
"Use Default"
id=
"3Om-Ey-2VK"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"unscript:"
target=
"Ady-hI-5gd"
id=
"0vZ-95-Ywn"
/>
</connections>
</menuItem>
<menuItem
title=
"Superscript"
id=
"Rqc-34-cIF"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"superscript:"
target=
"Ady-hI-5gd"
id=
"3qV-fo-wpU"
/>
</connections>
</menuItem>
<menuItem
title=
"Subscript"
id=
"I0S-gh-46l"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"subscript:"
target=
"Ady-hI-5gd"
id=
"Q6W-4W-IGz"
/>
</connections>
</menuItem>
<menuItem
title=
"Raise"
id=
"2h7-ER-AoG"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"raiseBaseline:"
target=
"Ady-hI-5gd"
id=
"4sk-31-7Q9"
/>
</connections>
</menuItem>
<menuItem
title=
"Lower"
id=
"1tx-W0-xDw"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"lowerBaseline:"
target=
"Ady-hI-5gd"
id=
"OF1-bc-KW4"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"Ndw-q3-faq"
/>
<menuItem
title=
"Show Colors"
keyEquivalent=
"C"
id=
"bgn-CT-cEk"
>
<connections>
<action
selector=
"orderFrontColorPanel:"
target=
"Ady-hI-5gd"
id=
"mSX-Xz-DV3"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"iMs-zA-UFJ"
/>
<menuItem
title=
"Copy Style"
keyEquivalent=
"c"
id=
"5Vv-lz-BsD"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"copyFont:"
target=
"Ady-hI-5gd"
id=
"GJO-xA-L4q"
/>
</connections>
</menuItem>
<menuItem
title=
"Paste Style"
keyEquivalent=
"v"
id=
"vKC-jM-MkH"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"pasteFont:"
target=
"Ady-hI-5gd"
id=
"JfD-CL-leO"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Text"
id=
"Fal-I4-PZk"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Text"
id=
"d9c-me-L2H"
>
<items>
<menuItem
title=
"Align Left"
keyEquivalent=
"{"
id=
"ZM1-6Q-yy1"
>
<connections>
<action
selector=
"alignLeft:"
target=
"Ady-hI-5gd"
id=
"zUv-R1-uAa"
/>
</connections>
</menuItem>
<menuItem
title=
"Center"
keyEquivalent=
"|"
id=
"VIY-Ag-zcb"
>
<connections>
<action
selector=
"alignCenter:"
target=
"Ady-hI-5gd"
id=
"spX-mk-kcS"
/>
</connections>
</menuItem>
<menuItem
title=
"Justify"
id=
"J5U-5w-g23"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"alignJustified:"
target=
"Ady-hI-5gd"
id=
"ljL-7U-jND"
/>
</connections>
</menuItem>
<menuItem
title=
"Align Right"
keyEquivalent=
"}"
id=
"wb2-vD-lq4"
>
<connections>
<action
selector=
"alignRight:"
target=
"Ady-hI-5gd"
id=
"r48-bG-YeY"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"4s2-GY-VfK"
/>
<menuItem
title=
"Writing Direction"
id=
"H1b-Si-o9J"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Writing Direction"
id=
"8mr-sm-Yjd"
>
<items>
<menuItem
title=
"Paragraph"
enabled=
"NO"
id=
"ZvO-Gk-QUH"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
</menuItem>
<menuItem
id=
"YGs-j5-SAR"
>
<string
key=
"title"
>
Default
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeBaseWritingDirectionNatural:"
target=
"Ady-hI-5gd"
id=
"qtV-5e-UBP"
/>
</connections>
</menuItem>
<menuItem
id=
"Lbh-J2-qVU"
>
<string
key=
"title"
>
Left to Right
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeBaseWritingDirectionLeftToRight:"
target=
"Ady-hI-5gd"
id=
"S0X-9S-QSf"
/>
</connections>
</menuItem>
<menuItem
id=
"jFq-tB-4Kx"
>
<string
key=
"title"
>
Right to Left
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeBaseWritingDirectionRightToLeft:"
target=
"Ady-hI-5gd"
id=
"5fk-qB-AqJ"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"swp-gr-a21"
/>
<menuItem
title=
"Selection"
enabled=
"NO"
id=
"cqv-fj-IhA"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
</menuItem>
<menuItem
id=
"Nop-cj-93Q"
>
<string
key=
"title"
>
Default
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeTextWritingDirectionNatural:"
target=
"Ady-hI-5gd"
id=
"lPI-Se-ZHp"
/>
</connections>
</menuItem>
<menuItem
id=
"BgM-ve-c93"
>
<string
key=
"title"
>
Left to Right
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeTextWritingDirectionLeftToRight:"
target=
"Ady-hI-5gd"
id=
"caW-Bv-w94"
/>
</connections>
</menuItem>
<menuItem
id=
"RB4-Sm-HuC"
>
<string
key=
"title"
>
Right to Left
</string>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"makeTextWritingDirectionRightToLeft:"
target=
"Ady-hI-5gd"
id=
"EXD-6r-ZUu"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"fKy-g9-1gm"
/>
<menuItem
title=
"Show Ruler"
id=
"vLm-3I-IUL"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"toggleRuler:"
target=
"Ady-hI-5gd"
id=
"FOx-HJ-KwY"
/>
</connections>
</menuItem>
<menuItem
title=
"Copy Ruler"
keyEquivalent=
"c"
id=
"MkV-Pr-PK5"
>
<modifierMask
key=
"keyEquivalentModifierMask"
control=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"copyRuler:"
target=
"Ady-hI-5gd"
id=
"71i-fW-3W2"
/>
</connections>
</menuItem>
<menuItem
title=
"Paste Ruler"
keyEquivalent=
"v"
id=
"LVM-kO-fVI"
>
<modifierMask
key=
"keyEquivalentModifierMask"
control=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"pasteRuler:"
target=
"Ady-hI-5gd"
id=
"cSh-wd-qM2"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"View"
id=
"H8h-7b-M4v"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"View"
id=
"HyV-fh-RgO"
>
<items>
<menuItem
title=
"Show Toolbar"
keyEquivalent=
"t"
id=
"snW-S8-Cw5"
>
<modifierMask
key=
"keyEquivalentModifierMask"
option=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"toggleToolbarShown:"
target=
"Ady-hI-5gd"
id=
"BXY-wc-z0C"
/>
</connections>
</menuItem>
<menuItem
title=
"Customize Toolbar…"
id=
"1UK-8n-QPP"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"runToolbarCustomizationPalette:"
target=
"Ady-hI-5gd"
id=
"pQI-g3-MTW"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"hB3-LF-h0Y"
/>
<menuItem
title=
"Show Sidebar"
keyEquivalent=
"s"
id=
"kIP-vf-haE"
>
<modifierMask
key=
"keyEquivalentModifierMask"
control=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"toggleSidebar:"
target=
"Ady-hI-5gd"
id=
"iwa-gc-5KM"
/>
</connections>
</menuItem>
<menuItem
title=
"Enter Full Screen"
keyEquivalent=
"f"
id=
"4J7-dP-txa"
>
<modifierMask
key=
"keyEquivalentModifierMask"
control=
"YES"
command=
"YES"
/>
<connections>
<action
selector=
"toggleFullScreen:"
target=
"Ady-hI-5gd"
id=
"dU3-MA-1Rq"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Window"
id=
"aUF-d1-5bR"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Window"
systemMenu=
"window"
id=
"Td7-aD-5lo"
>
<items>
<menuItem
title=
"Minimize"
keyEquivalent=
"m"
id=
"OY7-WF-poV"
>
<connections>
<action
selector=
"performMiniaturize:"
target=
"Ady-hI-5gd"
id=
"VwT-WD-YPe"
/>
</connections>
</menuItem>
<menuItem
title=
"Zoom"
id=
"R4o-n2-Eq4"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"performZoom:"
target=
"Ady-hI-5gd"
id=
"DIl-cC-cCs"
/>
</connections>
</menuItem>
<menuItem
isSeparatorItem=
"YES"
id=
"eu3-7i-yIM"
/>
<menuItem
title=
"Bring All to Front"
id=
"LE2-aR-0XJ"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<connections>
<action
selector=
"arrangeInFront:"
target=
"Ady-hI-5gd"
id=
"DRN-fu-gQh"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem
title=
"Help"
id=
"wpr-3q-Mcd"
>
<modifierMask
key=
"keyEquivalentModifierMask"
/>
<menu
key=
"submenu"
title=
"Help"
systemMenu=
"help"
id=
"F2S-fz-NVQ"
>
<items>
<menuItem
title=
"MacJsonToModelFile Help"
keyEquivalent=
"?"
id=
"FKE-Sm-Kum"
>
<connections>
<action
selector=
"showHelp:"
target=
"Ady-hI-5gd"
id=
"y7X-2Q-9no"
/>
</connections>
</menuItem>
</items>
</menu>
</menuItem>
</items>
</menu>
<connections>
<outlet
property=
"delegate"
destination=
"Voe-Tx-rLC"
id=
"PrD-fu-P6m"
/>
</connections>
</application>
<customObject
id=
"Voe-Tx-rLC"
customClass=
"AppDelegate"
customModule=
"MacJsonToModelFile"
customModuleProvider=
"target"
/>
<customObject
id=
"YLy-65-1bz"
customClass=
"NSFontManager"
/>
<customObject
id=
"Ady-hI-5gd"
userLabel=
"First Responder"
customClass=
"NSResponder"
sceneMemberID=
"firstResponder"
/>
</objects>
<point
key=
"canvasLocation"
x=
"75"
y=
"0.0"
/>
</scene>
<!--Window Controller-->
<scene
sceneID=
"R2V-B0-nI4"
>
<objects>
<windowController
id=
"B8D-0N-5wS"
sceneMemberID=
"viewController"
>
<window
key=
"window"
title=
"Window"
allowsToolTipsWhenApplicationIsInactive=
"NO"
autorecalculatesKeyViewLoop=
"NO"
releasedWhenClosed=
"NO"
visibleAtLaunch=
"NO"
animationBehavior=
"default"
id=
"IQv-IB-iLA"
>
<windowStyleMask
key=
"styleMask"
titled=
"YES"
closable=
"YES"
miniaturizable=
"YES"
resizable=
"YES"
/>
<windowPositionMask
key=
"initialPositionMask"
leftStrut=
"YES"
rightStrut=
"YES"
topStrut=
"YES"
bottomStrut=
"YES"
/>
<rect
key=
"contentRect"
x=
"196"
y=
"240"
width=
"480"
height=
"270"
/>
<rect
key=
"screenRect"
x=
"0.0"
y=
"0.0"
width=
"1680"
height=
"1027"
/>
<connections>
<outlet
property=
"delegate"
destination=
"B8D-0N-5wS"
id=
"98r-iN-zZc"
/>
</connections>
</window>
<connections>
<segue
destination=
"XfG-lQ-9wD"
kind=
"relationship"
relationship=
"window.shadowedContentViewController"
id=
"cq2-FE-JQM"
/>
</connections>
</windowController>
<customObject
id=
"Oky-zY-oP4"
userLabel=
"First Responder"
customClass=
"NSResponder"
sceneMemberID=
"firstResponder"
/>
</objects>
<point
key=
"canvasLocation"
x=
"75"
y=
"250"
/>
</scene>
<!--View Controller-->
<scene
sceneID=
"hIz-AP-VOD"
>
<objects>
<viewController
id=
"XfG-lQ-9wD"
customClass=
"ViewController"
customModule=
"MacJsonToModelFile"
customModuleProvider=
"target"
sceneMemberID=
"viewController"
>
<view
key=
"view"
id=
"m2S-Jp-Qdl"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"480"
height=
"500"
/>
<autoresizingMask
key=
"autoresizingMask"
/>
<subviews>
<stackView
distribution=
"fill"
orientation=
"vertical"
alignment=
"leading"
horizontalStackHuggingPriority=
"249.99998474121094"
verticalStackHuggingPriority=
"249.99998474121094"
detachesHiddenViews=
"YES"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"4Ln-IX-BL7"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"480"
height=
"500"
/>
<subviews>
<scrollView
borderType=
"none"
horizontalLineScroll=
"10"
horizontalPageScroll=
"10"
verticalLineScroll=
"10"
verticalPageScroll=
"10"
hasHorizontalScroller=
"NO"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"VB7-9f-CUM"
>
<rect
key=
"frame"
x=
"0.0"
y=
"28"
width=
"480"
height=
"472"
/>
<clipView
key=
"contentView"
drawsBackground=
"NO"
id=
"ybR-c0-jSJ"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"480"
height=
"472"
/>
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
<subviews>
<textView
importsGraphics=
"NO"
richText=
"NO"
verticallyResizable=
"YES"
spellingCorrection=
"YES"
smartInsertDelete=
"YES"
id=
"5Za-Kf-uIa"
>
<rect
key=
"frame"
x=
"0.0"
y=
"0.0"
width=
"480"
height=
"472"
/>
<autoresizingMask
key=
"autoresizingMask"
widthSizable=
"YES"
heightSizable=
"YES"
/>
<color
key=
"textColor"
name=
"textColor"
catalog=
"System"
colorSpace=
"catalog"
/>
<color
key=
"backgroundColor"
name=
"textBackgroundColor"
catalog=
"System"
colorSpace=
"catalog"
/>
<size
key=
"minSize"
width=
"480"
height=
"472"
/>
<size
key=
"maxSize"
width=
"480"
height=
"10000000"
/>
<color
key=
"insertionPointColor"
name=
"textColor"
catalog=
"System"
colorSpace=
"catalog"
/>
</textView>
</subviews>
</clipView>
<scroller
key=
"horizontalScroller"
hidden=
"YES"
wantsLayer=
"YES"
verticalHuggingPriority=
"750"
horizontal=
"YES"
id=
"rh6-6C-2iO"
>
<rect
key=
"frame"
x=
"-100"
y=
"-100"
width=
"240"
height=
"16"
/>
<autoresizingMask
key=
"autoresizingMask"
/>
</scroller>
<scroller
key=
"verticalScroller"
wantsLayer=
"YES"
verticalHuggingPriority=
"750"
horizontal=
"NO"
id=
"EUK-g5-e0k"
>
<rect
key=
"frame"
x=
"464"
y=
"0.0"
width=
"16"
height=
"472"
/>
<autoresizingMask
key=
"autoresizingMask"
/>
</scroller>
</scrollView>
<button
verticalHuggingPriority=
"750"
translatesAutoresizingMaskIntoConstraints=
"NO"
id=
"T0m-pb-6aN"
>
<rect
key=
"frame"
x=
"-7"
y=
"-7"
width=
"75"
height=
"32"
/>
<buttonCell
key=
"cell"
type=
"push"
title=
"Button"
bezelStyle=
"rounded"
alignment=
"center"
borderStyle=
"border"
imageScaling=
"proportionallyDown"
inset=
"2"
id=
"a5c-fG-IpU"
>
<behavior
key=
"behavior"
pushIn=
"YES"
lightByBackground=
"YES"
lightByGray=
"YES"
/>
<font
key=
"font"
metaFont=
"system"
/>
</buttonCell>
<connections>
<action
selector=
"clickStart:"
target=
"XfG-lQ-9wD"
id=
"2mN-f0-39a"
/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer
value=
"1000"
/>
<integer
value=
"1000"
/>
</visibilityPriorities>
<customSpacing>
<real
value=
"3.4028234663852886e+38"
/>
<real
value=
"3.4028234663852886e+38"
/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint
firstItem=
"4Ln-IX-BL7"
firstAttribute=
"leading"
secondItem=
"m2S-Jp-Qdl"
secondAttribute=
"leading"
id=
"XyI-0o-0sp"
/>
<constraint
firstItem=
"4Ln-IX-BL7"
firstAttribute=
"top"
secondItem=
"m2S-Jp-Qdl"
secondAttribute=
"top"
id=
"g6t-uT-c81"
/>
<constraint
firstAttribute=
"bottom"
secondItem=
"4Ln-IX-BL7"
secondAttribute=
"bottom"
id=
"iIJ-cM-Wci"
/>
<constraint
firstAttribute=
"trailing"
secondItem=
"4Ln-IX-BL7"
secondAttribute=
"trailing"
id=
"uz2-v2-htB"
/>
</constraints>
</view>
<connections>
<outlet
property=
"myScrollView"
destination=
"VB7-9f-CUM"
id=
"Ip0-aa-204"
/>
</connections>
</viewController>
<customObject
id=
"rPt-NT-nkU"
userLabel=
"First Responder"
customClass=
"NSResponder"
sceneMemberID=
"firstResponder"
/>
</objects>
<point
key=
"canvasLocation"
x=
"65"
y=
"639"
/>
</scene>
</scenes>
</document>
MacJsonToModelFile/FileManager/FileModel.swift
0 → 100644
View file @
6305b4d2
//
// FileModel.swift
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/21.
//
import
Cocoa
class
FileModel
:
NSObject
{
var
fileName
:
String
?
var
propertys
:
[
FileProperty
]
=
[]
}
class
FileProperty
:
NSObject
{
var
propertyName
:
String
?
var
propertyType
:
PropertyType
?
}
enum
PropertyType
{
case
id
case
int
case
string
case
float
case
bool
case
model
(
String
)
case
list
(
ArrayItemType
)
}
enum
ArrayItemType
{
case
id
case
int
case
string
case
float
case
bool
case
model
(
String
)
}
MacJsonToModelFile/FileManager/FileUtil.swift
0 → 100644
View file @
6305b4d2
//
// FileUtil.swift
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/21.
//
import
Cocoa
class
FileUtil
:
NSObject
{
let
manager
=
FileManager
.
default
func
clearFile
(){
let
exist
=
manager
.
fileExists
(
atPath
:
fileDir
.
path
)
if
exist
{
do
{
try
manager
.
removeItem
(
atPath
:
fileDir
.
path
)
print
(
"已存在,删除成功"
)
}
catch
{
print
(
"已存在,删除失败"
)
}
}
do
{
try
manager
.
createDirectory
(
at
:
fileDir
,
withIntermediateDirectories
:
true
,
attributes
:
nil
)
print
(
"创建文件夹成功"
)
}
catch
{
print
(
"创建文件夹失败"
)
}
}
func
createOcFile
(
_
model
:
FileModel
){
let
header
=
ObjcUtil
.
headerTextByModel
(
model
)
createFile
(
"
\(
model
.
fileName
!
)
.h"
,
header
)
let
implement
=
ObjcUtil
.
implementByModel
(
model
)
createFile
(
"
\(
model
.
fileName
!
)
.m"
,
implement
)
}
func
createFile
(
_
fileName
:
String
,
_
content
:
String
){
let
file
=
fileDir
.
appendingPathComponent
(
fileName
)
print
(
"文件:
\(
file
)
"
)
let
exist
=
manager
.
fileExists
(
atPath
:
file
.
path
)
if
!
exist
{
let
createSuccess
=
manager
.
createFile
(
atPath
:
file
.
path
,
contents
:
content
.
data
(
using
:
String
.
Encoding
.
utf8
),
attributes
:
nil
)
print
(
"文件创建结果:
\(
createSuccess
)
"
)
}
}
lazy
var
fileDir
:
URL
=
{
let
manager
=
FileManager
.
default
let
urlForDocument
=
manager
.
urls
(
for
:
.
desktopDirectory
,
in
:
.
userDomainMask
)
let
url
=
urlForDocument
[
0
]
.
appendingPathComponent
(
"__ModelResult"
,
isDirectory
:
true
)
return
url
}()
func
test
(){
//在桌面上创建一个文件
let
manager
=
FileManager
.
default
let
urlForDocument
=
manager
.
urls
(
for
:
.
desktopDirectory
,
in
:
.
userDomainMask
)
let
url
=
urlForDocument
[
0
]
createFile
(
name
:
"test.txt"
,
fileBaseUrl
:
url
)
}
//根据文件名和路径创建文件
func
createFile
(
name
:
String
,
fileBaseUrl
:
URL
){
let
manager
=
FileManager
.
default
let
file
=
fileBaseUrl
.
appendingPathComponent
(
name
)
print
(
"文件:
\(
file
)
"
)
let
exist
=
manager
.
fileExists
(
atPath
:
file
.
path
)
if
!
exist
{
//在文件中随便写入一些内容
let
str
=
"hello json"
let
createSuccess
=
manager
.
createFile
(
atPath
:
file
.
path
,
contents
:
str
.
data
(
using
:
String
.
Encoding
.
utf8
),
attributes
:
nil
)
print
(
"文件创建结果:
\(
createSuccess
)
"
)
}
else
{
//删除操作
do
{
try
manager
.
removeItem
(
atPath
:
file
.
path
)
}
catch
{
}
}
}
}
MacJsonToModelFile/FileManager/ObjcUtil.swift
0 → 100644
View file @
6305b4d2
//
// ObjcUtil.swift
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/21.
//
import
Cocoa
class
ObjcUtil
:
NSObject
{
static
func
headerTextByModel
(
_
model
:
FileModel
)
->
String
{
var
includeList
:
[
String
]
=
[]
var
content
=
""
for
pt
in
model
.
propertys
{
let
propertyName
=
replacedPropertyName
(
pt
.
propertyName
!
)
switch
pt
.
propertyType
{
case
.
id
:
content
+=
"@property (strong, nonatomic) id
\(
propertyName
)
;
\n
"
case
.
int
:
content
+=
"@property (assign, nonatomic) NSInteger
\(
propertyName
)
;
\n
"
case
.
string
:
content
+=
"@property (copy, nonatomic) NSString *
\(
propertyName
)
;
\n
"
case
.
float
:
content
+=
"@property (assign, nonatomic) double
\(
propertyName
)
;
\n
"
case
.
bool
:
content
+=
"@property (assign, nonatomic) BOOL
\(
propertyName
)
;
\n
"
case
.
model
(
let
pName
):
content
+=
"@property (strong, nonatomic)
\(
pName
)
*
\(
propertyName
)
;
\n
"
if
!
includeList
.
contains
(
pName
){
includeList
.
append
(
pName
)
}
break
case
.
list
(
let
itemType
):
switch
itemType
{
case
.
string
:
content
+=
"@property (copy, nonatomic) NSArray <NSString*> *
\(
propertyName
)
;
\n
"
case
.
model
(
let
pName
):
content
+=
"@property (copy, nonatomic) NSArray <
\(
pName
)
*> *
\(
propertyName
)
;
\n
"
if
!
includeList
.
contains
(
pName
){
includeList
.
append
(
pName
)
}
default
:
content
+=
"@property (copy, nonatomic) NSArray *
\(
propertyName
)
;
\n
"
}
break
default
:
break
}
}
var
includeTxt
=
getIncludeTxt
(
model
.
fileName
!
)
includeTxt
+=
"#import <Foundation/Foundation.h>
\n
"
for
item
in
includeList
{
includeTxt
+=
"#import
\"\(
item
)
.h
\"\n
"
}
includeTxt
+=
"
\n
@interface
\(
model
.
fileName
!
)
: NSObject
\n\n
"
content
=
includeTxt
+
content
content
=
content
+
"
\n
@end"
return
content
}
static
func
implementByModel
(
_
model
:
FileModel
)
->
String
{
var
content
=
getIncludeTxt
(
model
.
fileName
!
)
content
+=
"#import
\"\(
model
.
fileName
!
)
.h
\"\n\n
"
content
+=
"@implementation
\(
model
.
fileName
!
)\n\n
"
var
replaceCode
=
""
for
pt
in
model
.
propertys
{
let
propertyName
=
replacedPropertyName
(
pt
.
propertyName
!
)
if
propertyName
!=
pt
.
propertyName
!
{
replaceCode
+=
" @
\"\(
propertyName
)\"
: @
\"\(
pt
.
propertyName
!
)\"
,
\n
"
}
}
if
replaceCode
.
count
>
0
{
replaceCode
=
"+ (NSDictionary *)mj_replacedKeyFromPropertyName {
\n
"
+
" return @{
\n
"
+
replaceCode
+
" };
\n
"
+
"}
\n\n
"
content
+=
replaceCode
}
var
classInArrayCode
=
""
for
pt
in
model
.
propertys
{
switch
pt
.
propertyType
{
case
.
list
(
let
itemType
):
switch
itemType
{
case
.
model
(
let
pName
):
classInArrayCode
+=
" @
\"\(
pt
.
propertyName
!
)\"
: NSStringFromClass(
\(
pName
)
.class),
\n
"
break
default
:
break
}
default
:
break
}
}
if
classInArrayCode
.
count
>
0
{
classInArrayCode
=
"+ (NSDictionary *)mj_objectClassInArray {
\n
"
+
" return @{
\n
"
+
classInArrayCode
+
" };
\n
"
+
"}
\n\n
"
content
+=
classInArrayCode
}
content
+=
"@end"
return
content
}
static
func
getIncludeTxt
(
_
fileName
:
String
)
->
String
{
return
"//
\n
"
+
"//
\(
fileName
)
.h
\n
"
+
"// MacJsonToModelFile
\n
"
+
"//
\n
"
+
"// Created by mac on 2022/xx/xx.
\n
"
+
"// Copyright © 2022 mac. All rights reserved.
\n
"
+
"//
\n\n
"
}
static
func
replacedPropertyName
(
_
key
:
String
)
->
String
{
if
let
name
=
replacedDic
[
key
]
{
return
name
}
return
key
}
static
let
replacedDic
=
[
"id"
:
"ID"
]
}
MacJsonToModelFile/MacJsonToModelFile.entitlements
0 → 100644
View file @
6305b4d2
<?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/>
</plist>
MacJsonToModelFile/OcCode/MacJsonToModelFile-Bridging-Header.h
0 → 100644
View file @
6305b4d2
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "OcTool.h"
MacJsonToModelFile/OcCode/OcTool.h
0 → 100644
View file @
6305b4d2
//
// OcTool.h
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/22.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface
OcTool
:
NSObject
+
(
BOOL
)
isPureFloat
:
(
id
)
obj
;
+
(
BOOL
)
isPureBool
:
(
id
)
obj
;
+
(
BOOL
)
isPureInt
:
(
id
)
obj
;
@end
NS_ASSUME_NONNULL_END
MacJsonToModelFile/OcCode/OcTool.m
0 → 100644
View file @
6305b4d2
//
// OcTool.m
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/22.
//
#import "OcTool.h"
@implementation
OcTool
+
(
BOOL
)
isPureFloat
:
(
id
)
obj
{
if
([
obj
isKindOfClass
:[
NSNumber
class
]])
{
if
(
strcmp
([
obj
objCType
],
@encode
(
float
))
==
0
||
strcmp
([
obj
objCType
],
@encode
(
CGFloat
))
==
0
)
{
return
YES
;
}
}
return
NO
;
}
+
(
BOOL
)
isPureBool
:
(
id
)
obj
{
if
([
obj
isKindOfClass
:[
NSNumber
class
]])
{
if
(
strcmp
([
obj
objCType
],
@encode
(
BOOL
))
==
0
)
{
return
YES
;
}
}
return
NO
;
}
+
(
BOOL
)
isPureInt
:
(
id
)
obj
{
NSScanner
*
scan
=
[
NSScanner
scannerWithString
:[
NSString
stringWithFormat
:
@"%@"
,
obj
]];
int
val
;
return
[
scan
scanInt
:
&
val
]
&&
[
scan
isAtEnd
];
}
@end
MacJsonToModelFile/ViewController.swift
0 → 100644
View file @
6305b4d2
//
// ViewController.swift
// MacJsonToModelFile
//
// Created by chenyehong on 2022/2/21.
//
import
Cocoa
class
ViewController
:
NSViewController
{
override
func
viewDidLoad
()
{
super
.
viewDidLoad
()
// Do any additional setup after loading the view.
}
@IBOutlet
weak
var
myScrollView
:
NSScrollView
!
let
fileUtil
=
FileUtil
.
init
()
override
var
representedObject
:
Any
?
{
didSet
{
// Update the view, if already loaded.
}
}
@IBAction
func
clickStart
(
_
sender
:
Any
)
{
let
myTextView
:
NSTextView
=
myScrollView
.
documentView
!
as!
NSTextView
let
myText
:
String
=
myTextView
.
string
let
data
=
myText
.
data
(
using
:
String
.
Encoding
.
utf8
)
if
let
dict
=
try
?
JSONSerialization
.
jsonObject
(
with
:
data
!
,
options
:
JSONSerialization
.
ReadingOptions
.
mutableContainers
)
as?
[
String
:
Any
]
{
print
(
"转换成功"
)
fileMap
=
[:]
fileUtil
.
clearFile
()
handleDic
(
"Result"
,
dict
as
NSDictionary
)
for
(
key
,
value
)
in
fileMap
{
fileUtil
.
createOcFile
(
value
)
}
// return dict
}
else
{
print
(
"请输入正确的json字符串"
)
}
}
var
prefix
=
"SLM"
var
fileMap
:
[
String
:
FileModel
]
=
[:]
func
handleDic
(
_
name
:
String
,
_
dic
:
NSDictionary
)
->
String
{
var
fileName
=
"
\(
prefix
)\(
name
.
capitalized
)
"
var
count
=
0
while
fileMap
.
contains
(
where
:
{
(
key
:
String
,
value
:
FileModel
)
in
return
key
==
fileName
})
{
count
+=
1
fileName
=
"
\(
prefix
)\(
count
)\(
name
.
capitalized
)
"
}
let
fileModel
=
FileModel
.
init
()
fileModel
.
fileName
=
fileName
fileMap
[
fileModel
.
fileName
!
]
=
fileModel
for
(
key
,
value
)
in
dic
{
let
pt
=
FileProperty
.
init
()
pt
.
propertyName
=
key
as!
String
pt
.
propertyType
=
calPropertyType
(
pt
.
propertyName
!
,
value
)
fileModel
.
propertys
.
append
(
pt
)
}
return
fileName
}
func
calPropertyType
(
_
name
:
String
,
_
value
:
Any
)
->
PropertyType
{
if
let
value
=
value
as?
NSDictionary
{
let
pName
=
handleDic
(
name
,
value
)
return
PropertyType
.
model
(
pName
)
}
if
let
array
=
value
as?
NSArray
{
if
array
.
count
>
0
{
let
obj
=
array
[
0
]
if
let
obj
=
obj
as?
NSDictionary
{
let
pName
=
handleDic
(
name
,
obj
)
return
PropertyType
.
list
(
ArrayItemType
.
model
(
pName
))
}
if
obj
is
String
{
return
PropertyType
.
list
(
.
string
)
}
if
OcTool
.
isPureFloat
(
value
)
{
return
PropertyType
.
list
(
.
float
)
}
if
OcTool
.
isPureBool
(
value
)
{
return
PropertyType
.
list
(
.
bool
)
}
if
OcTool
.
isPureInt
(
value
)
{
return
PropertyType
.
list
(
.
int
)
}
}
return
PropertyType
.
list
(
.
id
)
}
if
value
is
String
{
return
.
string
}
if
OcTool
.
isPureFloat
(
value
)
{
return
.
float
}
if
OcTool
.
isPureBool
(
value
)
{
return
.
bool
}
if
OcTool
.
isPureInt
(
value
)
{
return
.
int
}
return
.
id
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment