diff --git a/DSYMTools_1.0.4.zip b/DSYMTools_1.0.4.zip new file mode 100644 index 0000000..01959dd Binary files /dev/null and b/DSYMTools_1.0.4.zip differ diff --git a/Objective-C/DSYMTools.xcodeproj/project.pbxproj b/Objective-C/DSYMTools.xcodeproj/project.pbxproj new file mode 100644 index 0000000..2e1654b --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/project.pbxproj @@ -0,0 +1,370 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 8057382A1D47C79000CEBA84 /* MainWindowViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 805738281D47C79000CEBA84 /* MainWindowViewController.m */; }; + 8057382B1D47C79000CEBA84 /* MainWindowViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 805738291D47C79000CEBA84 /* MainWindowViewController.xib */; }; + 8057382F1D486B4D00CEBA84 /* ArchiveInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 8057382E1D486B4D00CEBA84 /* ArchiveInfo.m */; }; + 805738321D4878F300CEBA84 /* UUIDInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 805738311D4878F300CEBA84 /* UUIDInfo.m */; }; + 80817F2C1D45F4D500CD2A11 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 80817F2B1D45F4D500CD2A11 /* AppDelegate.m */; }; + 80817F2F1D45F4D500CD2A11 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 80817F2E1D45F4D500CD2A11 /* main.m */; }; + 80817F311D45F4D500CD2A11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 80817F301D45F4D500CD2A11 /* Assets.xcassets */; }; + 80817F341D45F4D500CD2A11 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80817F321D45F4D500CD2A11 /* MainMenu.xib */; }; + 80A47DD31D4B343F00626266 /* ArchiveFilesScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 80A47DD21D4B343F00626266 /* ArchiveFilesScrollView.m */; }; + 80B88CA31D476C5000B2B83D /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 80B88CA11D476C5000B2B83D /* AboutWindowController.m */; }; + 80B88CA41D476C5000B2B83D /* AboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 80B88CA21D476C5000B2B83D /* AboutWindowController.xib */; }; + 80D250631DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.m in Sources */ = {isa = PBXBuildFile; fileRef = 80D250621DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 805738271D47C79000CEBA84 /* MainWindowViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainWindowViewController.h; sourceTree = ""; }; + 805738281D47C79000CEBA84 /* MainWindowViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainWindowViewController.m; sourceTree = ""; }; + 805738291D47C79000CEBA84 /* MainWindowViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindowViewController.xib; sourceTree = ""; }; + 8057382D1D486B4D00CEBA84 /* ArchiveInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveInfo.h; sourceTree = ""; }; + 8057382E1D486B4D00CEBA84 /* ArchiveInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArchiveInfo.m; sourceTree = ""; }; + 805738301D4878F300CEBA84 /* UUIDInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UUIDInfo.h; sourceTree = ""; }; + 805738311D4878F300CEBA84 /* UUIDInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UUIDInfo.m; sourceTree = ""; }; + 80817F271D45F4D500CD2A11 /* DSYMTools.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DSYMTools.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 80817F2A1D45F4D500CD2A11 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 80817F2B1D45F4D500CD2A11 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 80817F2E1D45F4D500CD2A11 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 80817F301D45F4D500CD2A11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 80817F331D45F4D500CD2A11 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 80817F351D45F4D500CD2A11 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 80817F3B1D45F77500CD2A11 /* DSYMTools.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = DSYMTools.entitlements; sourceTree = ""; }; + 80A47DD11D4B343F00626266 /* ArchiveFilesScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArchiveFilesScrollView.h; sourceTree = ""; }; + 80A47DD21D4B343F00626266 /* ArchiveFilesScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArchiveFilesScrollView.m; sourceTree = ""; }; + 80B88CA01D476C5000B2B83D /* AboutWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutWindowController.h; sourceTree = ""; }; + 80B88CA11D476C5000B2B83D /* AboutWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AboutWindowController.m; sourceTree = ""; }; + 80B88CA21D476C5000B2B83D /* AboutWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AboutWindowController.xib; sourceTree = ""; }; + 80D250611DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSAttributedString+Hyperlink.h"; sourceTree = ""; }; + 80D250621DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSAttributedString+Hyperlink.m"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 80817F241D45F4D500CD2A11 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8057382C1D486AE900CEBA84 /* Model */ = { + isa = PBXGroup; + children = ( + 8057382D1D486B4D00CEBA84 /* ArchiveInfo.h */, + 8057382E1D486B4D00CEBA84 /* ArchiveInfo.m */, + 805738301D4878F300CEBA84 /* UUIDInfo.h */, + 805738311D4878F300CEBA84 /* UUIDInfo.m */, + ); + path = Model; + sourceTree = ""; + }; + 80817F1E1D45F4D500CD2A11 = { + isa = PBXGroup; + children = ( + 80817F291D45F4D500CD2A11 /* DSYMTools */, + 80817F281D45F4D500CD2A11 /* Products */, + ); + sourceTree = ""; + }; + 80817F281D45F4D500CD2A11 /* Products */ = { + isa = PBXGroup; + children = ( + 80817F271D45F4D500CD2A11 /* DSYMTools.app */, + ); + name = Products; + sourceTree = ""; + }; + 80817F291D45F4D500CD2A11 /* DSYMTools */ = { + isa = PBXGroup; + children = ( + 80A47DD01D4B340A00626266 /* View */, + 8057382C1D486AE900CEBA84 /* Model */, + 80B88C9A1D4767F700B2B83D /* Controller */, + 80817F3B1D45F77500CD2A11 /* DSYMTools.entitlements */, + 80817F2A1D45F4D500CD2A11 /* AppDelegate.h */, + 80817F2B1D45F4D500CD2A11 /* AppDelegate.m */, + 80817F301D45F4D500CD2A11 /* Assets.xcassets */, + 80817F321D45F4D500CD2A11 /* MainMenu.xib */, + 80817F351D45F4D500CD2A11 /* Info.plist */, + 80817F2D1D45F4D500CD2A11 /* Supporting Files */, + 80D250611DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.h */, + 80D250621DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.m */, + ); + path = DSYMTools; + sourceTree = ""; + }; + 80817F2D1D45F4D500CD2A11 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 80817F2E1D45F4D500CD2A11 /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + 80A47DD01D4B340A00626266 /* View */ = { + isa = PBXGroup; + children = ( + 80A47DD11D4B343F00626266 /* ArchiveFilesScrollView.h */, + 80A47DD21D4B343F00626266 /* ArchiveFilesScrollView.m */, + ); + path = View; + sourceTree = ""; + }; + 80B88C9A1D4767F700B2B83D /* Controller */ = { + isa = PBXGroup; + children = ( + 805738271D47C79000CEBA84 /* MainWindowViewController.h */, + 805738281D47C79000CEBA84 /* MainWindowViewController.m */, + 805738291D47C79000CEBA84 /* MainWindowViewController.xib */, + 80B88CA01D476C5000B2B83D /* AboutWindowController.h */, + 80B88CA11D476C5000B2B83D /* AboutWindowController.m */, + 80B88CA21D476C5000B2B83D /* AboutWindowController.xib */, + ); + path = Controller; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 80817F261D45F4D500CD2A11 /* DSYMTools */ = { + isa = PBXNativeTarget; + buildConfigurationList = 80817F381D45F4D500CD2A11 /* Build configuration list for PBXNativeTarget "DSYMTools" */; + buildPhases = ( + 80817F231D45F4D500CD2A11 /* Sources */, + 80817F241D45F4D500CD2A11 /* Frameworks */, + 80817F251D45F4D500CD2A11 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DSYMTools; + productName = DSYMTools; + productReference = 80817F271D45F4D500CD2A11 /* DSYMTools.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 80817F1F1D45F4D500CD2A11 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0810; + ORGANIZATIONNAME = answer; + TargetAttributes = { + 80817F261D45F4D500CD2A11 = { + CreatedOnToolsVersion = 7.3.1; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 0; + }; + }; + }; + }; + }; + buildConfigurationList = 80817F221D45F4D500CD2A11 /* Build configuration list for PBXProject "DSYMTools" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 80817F1E1D45F4D500CD2A11; + productRefGroup = 80817F281D45F4D500CD2A11 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 80817F261D45F4D500CD2A11 /* DSYMTools */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 80817F251D45F4D500CD2A11 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 80B88CA41D476C5000B2B83D /* AboutWindowController.xib in Resources */, + 80817F311D45F4D500CD2A11 /* Assets.xcassets in Resources */, + 80817F341D45F4D500CD2A11 /* MainMenu.xib in Resources */, + 8057382B1D47C79000CEBA84 /* MainWindowViewController.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 80817F231D45F4D500CD2A11 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 80B88CA31D476C5000B2B83D /* AboutWindowController.m in Sources */, + 80A47DD31D4B343F00626266 /* ArchiveFilesScrollView.m in Sources */, + 80D250631DD1C5A8009D7EEC /* NSAttributedString+Hyperlink.m in Sources */, + 80817F2F1D45F4D500CD2A11 /* main.m in Sources */, + 805738321D4878F300CEBA84 /* UUIDInfo.m in Sources */, + 8057382F1D486B4D00CEBA84 /* ArchiveInfo.m in Sources */, + 80817F2C1D45F4D500CD2A11 /* AppDelegate.m in Sources */, + 8057382A1D47C79000CEBA84 /* MainWindowViewController.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + 80817F321D45F4D500CD2A11 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 80817F331D45F4D500CD2A11 /* Base */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 80817F361D45F4D500CD2A11 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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 = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 80817F371D45F4D500CD2A11 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + 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 = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + }; + name = Release; + }; + 80817F391D45F4D500CD2A11 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = DSYMTools/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.eku001.DSYMTools; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 80817F3A1D45F4D500CD2A11 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = DSYMTools/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; + PRODUCT_BUNDLE_IDENTIFIER = com.eku001.DSYMTools; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 80817F221D45F4D500CD2A11 /* Build configuration list for PBXProject "DSYMTools" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80817F361D45F4D500CD2A11 /* Debug */, + 80817F371D45F4D500CD2A11 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 80817F381D45F4D500CD2A11 /* Build configuration list for PBXNativeTarget "DSYMTools" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80817F391D45F4D500CD2A11 /* Debug */, + 80817F3A1D45F4D500CD2A11 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 80817F1F1D45F4D500CD2A11 /* Project object */; +} diff --git a/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..5d01686 --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/UserInterfaceState.xcuserstate b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..ce16944 Binary files /dev/null and b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..ee3458d --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/project.xcworkspace/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,5 @@ + + + + + diff --git a/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..8f94031 --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/DSYMTools.xcscheme b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/DSYMTools.xcscheme new file mode 100644 index 0000000..bfd5e0e --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/DSYMTools.xcscheme @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..8868397 --- /dev/null +++ b/Objective-C/DSYMTools.xcodeproj/xcuserdata/answer.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + DSYMTools.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 80817F261D45F4D500CD2A11 + + primary + + + + + diff --git a/Objective-C/DSYMTools/AppDelegate.h b/Objective-C/DSYMTools/AppDelegate.h new file mode 100644 index 0000000..4f047b1 --- /dev/null +++ b/Objective-C/DSYMTools/AppDelegate.h @@ -0,0 +1,15 @@ +// +// AppDelegate.h +// DSYMTools +// +// Created by answer on 7/25/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +@interface AppDelegate : NSObject + + +@end + diff --git a/Objective-C/DSYMTools/AppDelegate.m b/Objective-C/DSYMTools/AppDelegate.m new file mode 100644 index 0000000..aed99e8 --- /dev/null +++ b/Objective-C/DSYMTools/AppDelegate.m @@ -0,0 +1,96 @@ +// +// AppDelegate.m +// DSYMTools +// +// Created by answer on 7/25/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "AppDelegate.h" +#import "MainWindowViewController.h" + +@interface AppDelegate () + + +@property (strong) MainWindowViewController *mainWindowViewController; + +@end + +@implementation AppDelegate + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + // Insert code here to initialize your application + self.mainWindowViewController = [[MainWindowViewController alloc] initWithWindowNibName:@"MainWindowViewController"]; + [self.mainWindowViewController showWindow:self]; +} + +- (void)applicationWillTerminate:(NSNotification *)aNotification { + // Insert code here to tear down your application +} + +/** + * 关闭最后一个 window 的时候关闭应用 + * + * @param sender + * + * @return + */ +//- (BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender{ +// return YES; +//} + +/** + * 监听窗口关闭的通知,关闭程序。 + * + * @param notification + */ +//- (void) receiveWindowWillCloseMsg:(NSNotification *)notification{ +// NSWindow *window = notification.object; +// if(window == self.window){ +// [NSApp terminate:self]; +// } +//} + +//- (IBAction)openFilePanel:(id)sender { +// NSOpenPanel *openDlg = [NSOpenPanel openPanel]; +// openDlg.canChooseFiles = YES; +// openDlg.canChooseDirectories = YES; +// openDlg.allowsMultipleSelection = YES; +// openDlg.allowedFileTypes = @[@"txt"]; +// [openDlg beginWithCompletionHandler:^(NSInteger result) { +// if (result == NSFileHandlingPanelOKButton) { +// NSArray *fileURLs = [openDlg URLs]; +// for (NSURL *url in fileURLs) { +// NSError *error; +// NSString *string = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error]; +// if (!error) { +// self.textView.string = string; +// } +// } +// } +// }]; +// +//} +// +//- (IBAction)saveFileAction:(id)sender { +// NSSavePanel *saveDlg = [[NSSavePanel alloc]init]; +// saveDlg.title = @"Save File"; +// saveDlg.message = @"Save My File"; +// saveDlg.allowedFileTypes = @[@"txt"]; +// saveDlg.nameFieldStringValue = @"my"; +// [saveDlg beginWithCompletionHandler: ^(NSInteger result){ +// if(result==NSFileHandlingPanelOKButton){ +// NSURL *url =[saveDlg URL]; +// NSLog(@"filePath url%@",url); +// NSString *text = self.textView.string; +// NSError *error; +// [text writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:&error]; +// if(error){ +// NSLog(@"save file error %@",error); +// } +// } +// }]; +//} + + +@end diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/Contents.json b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..60eb60d --- /dev/null +++ b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "icon32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon32-1.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "icon64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "icon256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon256-1.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "icon512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon512-1.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "icon1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon1024.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon1024.png new file mode 100644 index 0000000..764b51a Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon1024.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon128.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon128.png new file mode 100644 index 0000000..30ecb22 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon128.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon16.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon16.png new file mode 100644 index 0000000..cde8af5 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon16.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256-1.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256-1.png new file mode 100644 index 0000000..c28de32 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256-1.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256.png new file mode 100644 index 0000000..c28de32 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon256.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32-1.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32-1.png new file mode 100644 index 0000000..1801d46 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32-1.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32.png new file mode 100644 index 0000000..1801d46 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon32.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512-1.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512-1.png new file mode 100644 index 0000000..1dfacb2 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512-1.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512.png new file mode 100644 index 0000000..1dfacb2 Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon512.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon64.png b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon64.png new file mode 100644 index 0000000..56fdc7e Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/AppIcon.appiconset/icon64.png differ diff --git a/Objective-C/DSYMTools/Assets.xcassets/Contents.json b/Objective-C/DSYMTools/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/Objective-C/DSYMTools/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Objective-C/DSYMTools/Assets.xcassets/about.imageset/Contents.json b/Objective-C/DSYMTools/Assets.xcassets/about.imageset/Contents.json new file mode 100644 index 0000000..fceca45 --- /dev/null +++ b/Objective-C/DSYMTools/Assets.xcassets/about.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "about.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/about.png b/Objective-C/DSYMTools/Assets.xcassets/about.imageset/about.png similarity index 100% rename from about.png rename to Objective-C/DSYMTools/Assets.xcassets/about.imageset/about.png diff --git a/Objective-C/DSYMTools/Assets.xcassets/avatar.imageset/Contents.json b/Objective-C/DSYMTools/Assets.xcassets/avatar.imageset/Contents.json new file mode 100644 index 0000000..d3441ad --- /dev/null +++ b/Objective-C/DSYMTools/Assets.xcassets/avatar.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "avatar.jpg", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/app/dSYM.app/Contents/Resources/avatar.jpg b/Objective-C/DSYMTools/Assets.xcassets/avatar.imageset/avatar.jpg old mode 100755 new mode 100644 similarity index 100% rename from app/dSYM.app/Contents/Resources/avatar.jpg rename to Objective-C/DSYMTools/Assets.xcassets/avatar.imageset/avatar.jpg diff --git a/Objective-C/DSYMTools/Assets.xcassets/export.imageset/Contents.json b/Objective-C/DSYMTools/Assets.xcassets/export.imageset/Contents.json new file mode 100644 index 0000000..2798d23 --- /dev/null +++ b/Objective-C/DSYMTools/Assets.xcassets/export.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "export.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Objective-C/DSYMTools/Assets.xcassets/export.imageset/export.png b/Objective-C/DSYMTools/Assets.xcassets/export.imageset/export.png new file mode 100644 index 0000000..9f8bcee Binary files /dev/null and b/Objective-C/DSYMTools/Assets.xcassets/export.imageset/export.png differ diff --git a/Objective-C/DSYMTools/Base.lproj/MainMenu.xib b/Objective-C/DSYMTools/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..a16e76f --- /dev/null +++ b/Objective-C/DSYMTools/Base.lproj/MainMenu.xib @@ -0,0 +1,659 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + Default + + + + + + + Left to Right + + + + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Objective-C/DSYMTools/Controller/AboutWindowController.h b/Objective-C/DSYMTools/Controller/AboutWindowController.h new file mode 100644 index 0000000..0199fe1 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/AboutWindowController.h @@ -0,0 +1,13 @@ +// +// AboutWindowController.h +// DSYMTools +// +// Created by answer on 7/26/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +@interface AboutWindowController : NSWindowController + +@end diff --git a/Objective-C/DSYMTools/Controller/AboutWindowController.m b/Objective-C/DSYMTools/Controller/AboutWindowController.m new file mode 100644 index 0000000..e5dcc02 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/AboutWindowController.m @@ -0,0 +1,53 @@ +// +// AboutWindowController.m +// DSYMTools +// +// Created by answer on 7/26/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "AboutWindowController.h" +#import "NSAttributedString+Hyperlink.h" + +@interface AboutWindowController () +@property (weak) IBOutlet NSTextField *blog; + +@property (weak) IBOutlet NSTextField *weibo; +@property (weak) IBOutlet NSTextField *gitHub; +@end + +@implementation AboutWindowController + +- (void)windowDidLoad { + [super windowDidLoad]; + + [self.weibo setAllowsEditingTextAttributes:YES]; + [self.weibo setSelectable:YES]; + + [self.blog setAllowsEditingTextAttributes:YES]; + [self.blog setSelectable:YES]; + + [self.gitHub setAllowsEditingTextAttributes:YES]; + [self.gitHub setSelectable:YES]; + + + NSURL* url1 = [NSURL URLWithString:@"http://weibo.com/u/1623064627"]; + NSMutableAttributedString* string1 = [[NSMutableAttributedString alloc] init]; + [string1 appendAttributedString: [NSAttributedString hyperlinkFromString:@"answer-huang" withURL:url1]]; + [self.weibo setAttributedStringValue: string1]; + + NSURL* url2 = [NSURL URLWithString:@"http://answerhuang.duapp.com"]; + NSMutableAttributedString* string2 = [[NSMutableAttributedString alloc] init]; + [string2 appendAttributedString: [NSAttributedString hyperlinkFromString:@"answerhuang.duapp.com" withURL:url2]]; + [self.blog setAttributedStringValue: string2]; + + NSURL* url3 = [NSURL URLWithString:@"https://github.com/answer-huang/dSYMTools"]; + NSMutableAttributedString* string3 = [[NSMutableAttributedString alloc] init]; + [string3 appendAttributedString: [NSAttributedString hyperlinkFromString:@"dSYMTools" withURL:url3]]; + [self.gitHub setAttributedStringValue: string3]; +} +- (IBAction)close:(id)sender { + [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK]; +} + +@end diff --git a/Objective-C/DSYMTools/Controller/AboutWindowController.xib b/Objective-C/DSYMTools/Controller/AboutWindowController.xib new file mode 100644 index 0000000..f30f2a7 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/AboutWindowController.xib @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Objective-C/DSYMTools/Controller/CustomModalWindowController.h b/Objective-C/DSYMTools/Controller/CustomModalWindowController.h new file mode 100755 index 0000000..bc8852c --- /dev/null +++ b/Objective-C/DSYMTools/Controller/CustomModalWindowController.h @@ -0,0 +1,13 @@ +// +// CustomModalWindowViewController.h +// CustomModalWindow +// +// Created by Nick Kuh on 16/01/2015. +// Copyright (c) 2015 Mumbo Apps Ltd. All rights reserved. +// + +#import + +@interface CustomModalWindowController : NSWindowController + +@end diff --git a/Objective-C/DSYMTools/Controller/CustomModalWindowController.m b/Objective-C/DSYMTools/Controller/CustomModalWindowController.m new file mode 100755 index 0000000..49082b2 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/CustomModalWindowController.m @@ -0,0 +1,32 @@ +// +// CustomModalWindowViewController.m +// CustomModalWindow +// +// Created by Nick Kuh on 16/01/2015. +// Copyright (c) 2015 Mumbo Apps Ltd. All rights reserved. +// + +#import "CustomModalWindowController.h" + +@interface CustomModalWindowController () +@property (weak) IBOutlet NSTextField *label1; + +@end + +@implementation CustomModalWindowController + +- (void)windowDidLoad { + [super windowDidLoad]; + + +} + +- (IBAction)didTapCancelButton:(id)sender { + [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseCancel]; +} + +- (IBAction)didTapDoneButton:(id)sender { + [self.window.sheetParent endSheet:self.window returnCode:NSModalResponseOK]; +} + +@end diff --git a/Objective-C/DSYMTools/Controller/CustomModalWindowController.xib b/Objective-C/DSYMTools/Controller/CustomModalWindowController.xib new file mode 100755 index 0000000..80c2815 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/CustomModalWindowController.xib @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Objective-C/DSYMTools/Controller/MainWindowViewController.h b/Objective-C/DSYMTools/Controller/MainWindowViewController.h new file mode 100755 index 0000000..0c9c935 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/MainWindowViewController.h @@ -0,0 +1,13 @@ +// +// MainWindowViewController.h +// CustomModalWindow +// +// Created by answer on 7/26/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +@interface MainWindowViewController : NSWindowController + +@end diff --git a/Objective-C/DSYMTools/Controller/MainWindowViewController.m b/Objective-C/DSYMTools/Controller/MainWindowViewController.m new file mode 100755 index 0000000..63b532a --- /dev/null +++ b/Objective-C/DSYMTools/Controller/MainWindowViewController.m @@ -0,0 +1,417 @@ +// +// MainWindowViewController.m +// CustomModalWindow +// +// Created by answer on 7/26/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "MainWindowViewController.h" +#import "AboutWindowController.h" +#import "ArchiveInfo.h" +#import "UUIDInfo.h" +#import "ArchiveFilesScrollView.h" + + +@interface MainWindowViewController () + + +@property (strong) AboutWindowController *aboutWindowController; + +/** + * 显示 archive 文件的 tableView + */ +@property (weak) IBOutlet NSTableView *archiveFilesTableView; + +/** + * 存放 radio 的 box + */ +@property (weak) IBOutlet NSBox *radioBox; + +/** + * archive 文件信息数组 + */ +@property (copy) NSMutableArray *archiveFilesInfo; + +/** + * 选中的 archive 文件信息 + */ +@property (strong) ArchiveInfo *selectedArchiveInfo; + +/** + * 选中的 UUID 信息 + */ +@property (strong) UUIDInfo *selectedUUIDInfo; + +/** + * 显示选中的 CPU 类型对应可执行文件的 UUID + */ +@property (weak) IBOutlet NSTextField *selectedUUIDLabel; + +/** + * 显示默认的 Slide Address + */ +@property (weak) IBOutlet NSTextField *defaultSlideAddressLabel; + +/** + * 显示错误内存地址 + */ +@property (weak) IBOutlet NSTextField *errorMemoryAddressLabel; + +/** + * 错误信息 + */ +@property (unsafe_unretained) IBOutlet NSTextView *errorMessageView; + + + +@property (weak) IBOutlet ArchiveFilesScrollView *archiveFilesScrollView; + +@end + +@implementation MainWindowViewController + + +- (void)windowDidLoad{ + [super windowDidLoad]; + + [self.window registerForDraggedTypes:@[NSColorPboardType, NSFilenamesPboardType]]; + + self.archiveFilesTableView.doubleAction = @selector(doubleActionMethod); + + NSArray *archiveFilePaths = [self allDSYMFilePath]; + [self handleArchiveFileWithPath:archiveFilePaths]; +} + +/** + * 处理给定archive文件路径,获取 archiveinfo 对象 + * + * @param archiveFilePaths archvie 文件路径 + */ +- (void)handleArchiveFileWithPath:(NSArray *)archiveFilePaths { + _archiveFilesInfo = [NSMutableArray arrayWithCapacity:1]; + for(NSString *archivePath in archiveFilePaths){ + ArchiveInfo *archiveInfo = [[ArchiveInfo alloc] init]; + archiveInfo.archiveFilePath = archivePath; + NSString *fileName = archivePath.lastPathComponent; + //如果不是 xcarchive 文件路径则继续循环 + if (![fileName hasSuffix:@".xcarchive"]){ + continue; + } + archiveInfo.archiveFileName = fileName; + [_archiveFilesInfo addObject:archiveInfo]; + } + [self extraDSYMInfoFromArchiveInfo:_archiveFilesInfo]; + + [self.archiveFilesTableView reloadData]; +} + +/** + * 从 archive 文件中获取 dsym 文件信息 + * + * @param archiveFilesPath archive info 对象 + */ +- (void)extraDSYMInfoFromArchiveInfo:(NSArray *)archiveFilesPath { + + //匹配 () 里面内容 + NSString *pattern = @"(?<=\\()[^}]*(?=\\))"; + NSRegularExpression *reg = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil]; + + for(ArchiveInfo *archiveInfo in archiveFilesPath){ + NSString *dSYMsDirectoryPath = [NSString stringWithFormat:@"%@/dSYMs", archiveInfo.archiveFilePath]; + NSArray *keys = @[@"NSURLPathKey",@"NSURLFileResourceTypeKey",@"NSURLIsDirectoryKey",@"NSURLIsPackageKey"]; + NSArray *dSYMSubFiles= [[NSFileManager defaultManager] contentsOfDirectoryAtURL:[NSURL fileURLWithPath:dSYMsDirectoryPath] includingPropertiesForKeys:keys options:(NSDirectoryEnumerationSkipsHiddenFiles | NSDirectoryEnumerationSkipsPackageDescendants) error:nil]; + for(NSURL *fileURLs in dSYMSubFiles){ + if ([[fileURLs.relativePath lastPathComponent] hasSuffix:@"dSYM"]){ + archiveInfo.dSYMFilePath = fileURLs.relativePath; + archiveInfo.dSYMFileName = fileURLs.relativePath.lastPathComponent; + } + } + NSString *commandString = [NSString stringWithFormat:@"dwarfdump --uuid \"%@\"",archiveInfo.dSYMFilePath]; + NSString *uuidsString = [self runCommand:commandString]; + NSArray *uuids = [uuidsString componentsSeparatedByString:@"\n"]; + + NSMutableArray *uuidInfos = [NSMutableArray arrayWithCapacity:1]; + for(NSString *uuidString in uuids){ + NSArray* match = [reg matchesInString:uuidString options:NSMatchingReportCompletion range:NSMakeRange(0, [uuidString length])]; + if (match.count == 0) { + continue; + } + for (NSTextCheckingResult *result in match) { + NSRange range = [result range]; + UUIDInfo *uuidInfo = [[UUIDInfo alloc] init]; + uuidInfo.arch = [uuidString substringWithRange:range]; + uuidInfo.uuid = [uuidString substringWithRange:NSMakeRange(6, range.location-6-2)]; + uuidInfo.executableFilePath = [uuidString substringWithRange:NSMakeRange(range.location+range.length+2, [uuidString length]-(range.location+range.length+2))]; + [uuidInfos addObject:uuidInfo]; + } + archiveInfo.uuidInfos = uuidInfos; + } + } +} + +/** + * 获取所有 dSYM 文件目录. + */ +- (NSMutableArray *)allDSYMFilePath { + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSString *archivesPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Library/Developer/Xcode/Archives/"]; + NSURL *bundleURL = [NSURL fileURLWithPath:archivesPath]; + NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL + includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey] + options:NSDirectoryEnumerationSkipsHiddenFiles + errorHandler:^BOOL(NSURL *url, NSError *error) + { + if (error) { + NSLog(@"[Error] %@ (%@)", error, url); + return NO; + } + + return YES; + }]; + + NSMutableArray *mutableFileURLs = [NSMutableArray array]; + for (NSURL *fileURL in enumerator) { + NSString *filename; + [fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil]; + + NSNumber *isDirectory; + [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; + + if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) { + [enumerator skipDescendants]; + continue; + } + + //TODO:过滤部分没必要遍历的目录 + + if ([filename hasSuffix:@".xcarchive"] && [isDirectory boolValue]){ + [mutableFileURLs addObject:fileURL.relativePath]; + [enumerator skipDescendants]; + } + } + return mutableFileURLs; +} + +- (NSString *)runCommand:(NSString *)commandToRun +{ + NSTask *task = [[NSTask alloc] init]; + [task setLaunchPath:@"/bin/sh"]; + + NSArray *arguments = @[@"-c", + [NSString stringWithFormat:@"%@", commandToRun]]; +// NSLog(@"run command:%@", commandToRun); + [task setArguments:arguments]; + + NSPipe *pipe = [NSPipe pipe]; + [task setStandardOutput:pipe]; + + NSFileHandle *file = [pipe fileHandleForReading]; + + [task launch]; + + NSData *data = [file readDataToEndOfFile]; + + NSString *output = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + return output; +} + + +/** + * 导出 ipa 文件 + xcodebuild -exportArchive -exportFormat ipa -archivePath "/path/to/archiveFile" -exportPath "/path/to/ipaFile" + */ +- (IBAction)exportIPA:(id)sender { + if(!_selectedArchiveInfo){ + NSLog(@"还未选中 archive 文件"); + return; + } + + NSString *ipaFileName = [_selectedArchiveInfo.archiveFileName stringByReplacingOccurrencesOfString:@"xcarchive" withString:@"ipa"]; + + NSSavePanel *saveDlg = [[NSSavePanel alloc]init]; + saveDlg.title = ipaFileName; + saveDlg.message = @"Save My File"; + saveDlg.allowedFileTypes = @[@"ipa"]; + saveDlg.nameFieldStringValue = ipaFileName; + [saveDlg beginWithCompletionHandler: ^(NSInteger result){ + if(result == NSFileHandlingPanelOKButton){ + NSURL *url =[saveDlg URL]; + NSLog(@"filePath url%@",url); + NSString *exportCmd = [NSString stringWithFormat:@"/usr/bin/xcodebuild -exportArchive -exportFormat ipa -archivePath \"%@\" -exportPath \"%@\"", _selectedArchiveInfo.archiveFilePath, url.relativePath]; + [self runCommand:exportCmd]; + } + }]; +} + + +- (IBAction)aboutMe:(id)sender { + self.aboutWindowController = [[AboutWindowController alloc] initWithWindowNibName:@"AboutWindowController"]; + [self.window beginSheet:self.aboutWindowController.window completionHandler:^(NSModalResponse returnCode) { + switch (returnCode) { + case NSModalResponseOK: + NSLog(@"Done button tapped in Custom Sheet"); + break; + case NSModalResponseCancel: + NSLog(@"Cancel button tapped in Custom Sheet"); + break; + + default: + break; + } + self.aboutWindowController = nil; + }]; +} + +#pragma mark - NSTableViewDataSources +- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView{ + return [_archiveFilesInfo count]; +} + +- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ + ArchiveInfo *archiveInfo= _archiveFilesInfo[row]; + return archiveInfo.archiveFileName; +} + +- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{ + + ArchiveInfo *archiveInfo= _archiveFilesInfo[row]; + NSString *identifier = tableColumn.identifier; + NSView *view = [tableView makeViewWithIdentifier:identifier owner:self]; + NSArray *subviews = view.subviews; + if (subviews.count > 0) { + if ([identifier isEqualToString:@"name"]) { + NSTextField *textField = subviews[0]; + textField.stringValue = archiveInfo.archiveFileName; + } + } + return view; +} + +- (void)tableViewSelectionDidChange:(NSNotification *)notification{ + NSInteger row = [notification.object selectedRow]; + _selectedArchiveInfo= _archiveFilesInfo[row]; + [self resetPreInformation]; + + CGFloat radioButtonWidth = CGRectGetWidth(self.radioBox.contentView.frame); + CGFloat radioButtonHeight = 18; + [_selectedArchiveInfo.uuidInfos enumerateObjectsUsingBlock:^(UUIDInfo *uuidInfo, NSUInteger idx, BOOL *stop) { + CGFloat space = (CGRectGetHeight(self.radioBox.contentView.frame) - _selectedArchiveInfo.uuidInfos.count * radioButtonHeight) / (_selectedArchiveInfo.uuidInfos.count + 1); + CGFloat y = space * (idx + 1) + idx * radioButtonHeight; + NSButton *radioButton = [[NSButton alloc] initWithFrame:NSMakeRect(10,y,radioButtonWidth,radioButtonHeight)]; + [radioButton setButtonType:NSRadioButton]; + [radioButton setTitle:uuidInfo.arch]; + radioButton.tag = idx + 1; + [radioButton setAction:@selector(radioButtonAction:)]; + [self.radioBox.contentView addSubview:radioButton]; + }]; +} + +/** + * 重置之前显示的信息 + */ +- (void)resetPreInformation { + [self.radioBox.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; + _selectedUUIDInfo = nil; + self.selectedUUIDLabel.stringValue = @""; + self.defaultSlideAddressLabel.stringValue = @""; + self.errorMemoryAddressLabel.stringValue = @""; + [self.errorMessageView setString:@""]; +} + +- (void)radioButtonAction:(id)sender{ + NSButton *radioButton = sender; + NSInteger tag = radioButton.tag; + _selectedUUIDInfo = _selectedArchiveInfo.uuidInfos[tag - 1]; + _selectedUUIDLabel.stringValue = _selectedUUIDInfo.uuid; + _defaultSlideAddressLabel.stringValue = _selectedUUIDInfo.defaultSlideAddress; +} + +- (void)doubleActionMethod{ + NSLog(@"double action"); +} + +- (IBAction)analyse:(id)sender { + if(self.selectedArchiveInfo == nil){ + return; + } + + if(self.selectedUUIDInfo == nil){ + return; + } + + if([self.defaultSlideAddressLabel.stringValue isEqualToString:@""]){ + return; + } + + if([self.errorMemoryAddressLabel.stringValue isEqualToString:@""]){ + return; + } + + NSString *commandString = [NSString stringWithFormat:@"xcrun atos -arch %@ -o \"%@\" -l %@ %@", self.selectedUUIDInfo.arch, self.selectedUUIDInfo.executableFilePath, self.defaultSlideAddressLabel.stringValue, self.errorMemoryAddressLabel.stringValue]; + NSString *result = [self runCommand:commandString]; + [self.errorMessageView setString:result]; +} + + +- (NSDragOperation)draggingEntered:(id )sender{ + + NSPasteboard *pboard; + NSDragOperation sourceDragMask; + + sourceDragMask = [sender draggingSourceOperationMask]; + pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSColorPboardType] ) { + if (sourceDragMask & NSDragOperationGeneric) { + return NSDragOperationGeneric; + } + } + if ( [[pboard types] containsObject:NSFilenamesPboardType] ) { + if (sourceDragMask & NSDragOperationLink) { + return NSDragOperationLink; + } else if (sourceDragMask & NSDragOperationCopy) { + return NSDragOperationCopy; + } + } + return NSDragOperationNone; +} + +- (void)draggingExited:(id)sender{ + +} + +- (BOOL)performDragOperation:(id )sender +{ + NSPasteboard *pboard = [sender draggingPasteboard]; + + if ([[pboard types] containsObject:NSURLPboardType] ) { + NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; + NSLog(@"%@",fileURL); + } + + if([[pboard types] containsObject:NSFilenamesPboardType]){ + NSArray *files = [pboard propertyListForType:NSFilenamesPboardType]; + NSMutableArray *archiveFilePaths = [NSMutableArray arrayWithCapacity:1]; + for(NSString *filePath in files){ + if([filePath.pathExtension isEqualToString:@"xcarchive"]){ + NSLog(@"%@", filePath); + [archiveFilePaths addObject:filePath]; + } + } + + if(archiveFilePaths.count == 0){ + NSLog(@"没有包含任何 xcarchive 文件"); + return NO; + } + + [self handleArchiveFileWithPath:archiveFilePaths]; + + + } + + return YES; +} + +@end diff --git a/Objective-C/DSYMTools/Controller/MainWindowViewController.xib b/Objective-C/DSYMTools/Controller/MainWindowViewController.xib new file mode 100755 index 0000000..cf5d276 --- /dev/null +++ b/Objective-C/DSYMTools/Controller/MainWindowViewController.xib @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Objective-C/DSYMTools/DSYMTools.entitlements b/Objective-C/DSYMTools/DSYMTools.entitlements new file mode 100644 index 0000000..0c67376 --- /dev/null +++ b/Objective-C/DSYMTools/DSYMTools.entitlements @@ -0,0 +1,5 @@ + + + + + diff --git a/Objective-C/DSYMTools/Info.plist b/Objective-C/DSYMTools/Info.plist new file mode 100644 index 0000000..7fc9eb1 --- /dev/null +++ b/Objective-C/DSYMTools/Info.plist @@ -0,0 +1,34 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0.4 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + Copyright © 2016 answer. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Objective-C/DSYMTools/Model/ArchiveInfo.h b/Objective-C/DSYMTools/Model/ArchiveInfo.h new file mode 100644 index 0000000..a86c1b4 --- /dev/null +++ b/Objective-C/DSYMTools/Model/ArchiveInfo.h @@ -0,0 +1,39 @@ +// +// ArchiveInfo.h +// DSYMTools +// +// Created by answer on 7/27/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import +@class UUIDInfo; + +@interface ArchiveInfo : NSObject + +/** + * dSYM 路径 + */ +@property (copy) NSString *dSYMFilePath; + +/** + * dSYM 文件名 + */ +@property (copy) NSString *dSYMFileName; + +/** + * archive 文件名 + */ +@property (copy) NSString *archiveFileName; + +/** + * archive 文件路径 + */ +@property (copy) NSString *archiveFilePath; + +/** + * uuids + */ +@property (copy) NSArray *uuidInfos; + +@end diff --git a/Objective-C/DSYMTools/Model/ArchiveInfo.m b/Objective-C/DSYMTools/Model/ArchiveInfo.m new file mode 100644 index 0000000..10a4af1 --- /dev/null +++ b/Objective-C/DSYMTools/Model/ArchiveInfo.m @@ -0,0 +1,13 @@ +// +// ArchiveInfo.m +// DSYMTools +// +// Created by answer on 7/27/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "ArchiveInfo.h" + +@implementation ArchiveInfo + +@end diff --git a/Objective-C/DSYMTools/Model/UUIDInfo.h b/Objective-C/DSYMTools/Model/UUIDInfo.h new file mode 100644 index 0000000..bb5468d --- /dev/null +++ b/Objective-C/DSYMTools/Model/UUIDInfo.h @@ -0,0 +1,33 @@ +// +// UUIDInfo.h +// DSYMTools +// +// Created by answer on 7/27/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +@interface UUIDInfo : NSObject + +/** + * arch 类型 + */ +@property (nonatomic, copy) NSString *arch; + +/** + * 默认的 Slide Address + */ +@property (nonatomic, readonly) NSString *defaultSlideAddress; + +/** + * uuid 值 + */ +@property (nonatomic, copy) NSString *uuid; + +/** + * 可执行文件路径 + */ +@property (nonatomic, copy) NSString *executableFilePath; + +@end diff --git a/Objective-C/DSYMTools/Model/UUIDInfo.m b/Objective-C/DSYMTools/Model/UUIDInfo.m new file mode 100644 index 0000000..95c7726 --- /dev/null +++ b/Objective-C/DSYMTools/Model/UUIDInfo.m @@ -0,0 +1,33 @@ +// +// UUIDInfo.m +// DSYMTools +// +// Created by answer on 7/27/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "UUIDInfo.h" + +@interface UUIDInfo() + +/** + * 默认的 Slide Address + */ +@property (nonatomic, readwrite) NSString *defaultSlideAddress; + +@end + +@implementation UUIDInfo + +- (void)setArch:(NSString *)arch { + _arch = arch; + if([arch isEqualToString:@"arm64"]){ + _defaultSlideAddress = @"0x0000000100000000"; + }else if([arch isEqualToString:@"armv7"]){ + _defaultSlideAddress = @"0x00004000"; + }else{ + _defaultSlideAddress = @""; + } +} + +@end diff --git a/Objective-C/DSYMTools/NSAttributedString+Hyperlink.h b/Objective-C/DSYMTools/NSAttributedString+Hyperlink.h new file mode 100644 index 0000000..e9a305d --- /dev/null +++ b/Objective-C/DSYMTools/NSAttributedString+Hyperlink.h @@ -0,0 +1,15 @@ +// +// NSAttributedString+Hyperlink.h +// DSYMTools +// +// Created by answer on 2016/11/8. +// Copyright © 2016年 answer. All rights reserved. +// + +#import + +@interface NSAttributedString (Hyperlink) + ++(id)hyperlinkFromString:(NSString*)inString withURL:(NSURL*)aURL; + +@end diff --git a/Objective-C/DSYMTools/NSAttributedString+Hyperlink.m b/Objective-C/DSYMTools/NSAttributedString+Hyperlink.m new file mode 100644 index 0000000..713f9e1 --- /dev/null +++ b/Objective-C/DSYMTools/NSAttributedString+Hyperlink.m @@ -0,0 +1,34 @@ +// +// NSAttributedString+Hyperlink.m +// DSYMTools +// +// Created by answer on 2016/11/8. +// Copyright © 2016年 answer. All rights reserved. +// + +#import "NSAttributedString+Hyperlink.h" +#import + +@implementation NSAttributedString (Hyperlink) + ++(id)hyperlinkFromString:(NSString*)inString withURL:(NSURL*)aURL +{ + NSMutableAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: inString]; + NSRange range = NSMakeRange(0, [attrString length]); + + [attrString beginEditing]; + [attrString addAttribute:NSLinkAttributeName value:[aURL absoluteString] range:range]; + + // make the text appear in blue + [attrString addAttribute:NSForegroundColorAttributeName value:[NSColor blueColor] range:range]; + + // next make the text appear with an underline + [attrString addAttribute: + NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:NSUnderlineStyleSingle] range:range]; + + [attrString endEditing]; + + return attrString; +} + +@end diff --git a/Objective-C/DSYMTools/View/ArchiveFilesScrollView.h b/Objective-C/DSYMTools/View/ArchiveFilesScrollView.h new file mode 100644 index 0000000..c2457b4 --- /dev/null +++ b/Objective-C/DSYMTools/View/ArchiveFilesScrollView.h @@ -0,0 +1,17 @@ +// +// ArchiveFilesScrollView.h +// DSYMTools +// +// Created by answer on 7/29/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +@interface ArchiveFilesScrollView : NSScrollView +{ + BOOL highlight; +} + + +@end diff --git a/Objective-C/DSYMTools/View/ArchiveFilesScrollView.m b/Objective-C/DSYMTools/View/ArchiveFilesScrollView.m new file mode 100644 index 0000000..a694eb0 --- /dev/null +++ b/Objective-C/DSYMTools/View/ArchiveFilesScrollView.m @@ -0,0 +1,71 @@ +// +// ArchiveFilesScrollView.m +// DSYMTools +// +// Created by answer on 7/29/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import "ArchiveFilesScrollView.h" + +@implementation ArchiveFilesScrollView + + + +- (NSDragOperation)draggingEntered:(id )sender{ + + + highlight=YES; + + [self setNeedsDisplay: YES]; + + NSPasteboard *pboard; + NSDragOperation sourceDragMask; + + sourceDragMask = [sender draggingSourceOperationMask]; + pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSColorPboardType] ) { + if (sourceDragMask & NSDragOperationGeneric) { + return NSDragOperationGeneric; + } + } + if ( [[pboard types] containsObject:NSFilenamesPboardType] ) { + if (sourceDragMask & NSDragOperationLink) { + return NSDragOperationLink; + } else if (sourceDragMask & NSDragOperationCopy) { + return NSDragOperationCopy; + } + } + return NSDragOperationNone; +} + +- (void)draggingExited:(id)sender{ + highlight=NO; + + [self setNeedsDisplay: YES]; +} + +- (BOOL)performDragOperation:(id )sender +{ + NSPasteboard *pboard = [sender draggingPasteboard]; + + if ( [[pboard types] containsObject:NSURLPboardType] ) { + NSURL *fileURL = [NSURL URLFromPasteboard:pboard]; + // Perform operation using the file’s URL + NSLog(@"%@",fileURL); + } + return YES; +} + +- (void)drawRect:(NSRect)dirtyRect { + [super drawRect:dirtyRect]; + + if ( highlight ) { + [[NSColor redColor] set]; + [NSBezierPath setDefaultLineWidth: 5]; + [NSBezierPath strokeRect: dirtyRect]; + } +} + +@end diff --git a/Objective-C/DSYMTools/main.m b/Objective-C/DSYMTools/main.m new file mode 100644 index 0000000..09aceaa --- /dev/null +++ b/Objective-C/DSYMTools/main.m @@ -0,0 +1,13 @@ +// +// main.m +// DSYMTools +// +// Created by answer on 7/25/16. +// Copyright © 2016 answer. All rights reserved. +// + +#import + +int main(int argc, const char * argv[]) { + return NSApplicationMain(argc, argv); +} diff --git a/README.md b/README.md index 7203dc6..85e6de1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ #更新: +###Version 1.0.4 2016-11-08 +1.使用 Objective-C 重写应用。 +2.建议都使用此版本。 ###Version 1.0.3 2015-05-16 1.解决文件路径中不能包含空格的 bug。 @@ -9,12 +12,8 @@ 1.增加对 dSYM 文件的支持,直接将 xcarchive 或 dSYM 文件拖入窗口中即可。 -2.增加项目编译时自动将 dSYM 文件保存到项目目录下的脚本(如果选中 Run script only when installing 则只会在每次 Archive 的时候保存 dSYM 文件到根目录),并将 dSYM 路径写入应用的数据库中,下次打开软件时,自动导入保存的 dSYM 文件路径。(脚本:`/usr/bin/python /Applications/dSYM.app/Contents/Resources/RunScript.py`) -![runScript][8] - - -3.修复 dSYM 根据和版本管理软件冲突的 bug。 +2.修复 dSYM 根据和版本管理软件冲突的 bug。 ###Version 1.0.0 2014-06-26 @@ -80,6 +79,5 @@ Xcode编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保 [5]: http://www.cimgf.com/2009/12/23/automatically-save-the-dsym-files/ [6]: http://pan.baidu.com/s/1mg01Qha [7]: https://github.com/answer-huang/dSYMTools -[8]: http://answerhuang.bj.bcebos.com/blog/runScript.png diff --git a/AHDropTarget.py b/wxPython/AHDropTarget.py similarity index 100% rename from AHDropTarget.py rename to wxPython/AHDropTarget.py diff --git a/MyInfo.py b/wxPython/MyInfo.py similarity index 100% rename from MyInfo.py rename to wxPython/MyInfo.py diff --git a/RunScript.py b/wxPython/RunScript.py similarity index 100% rename from RunScript.py rename to wxPython/RunScript.py diff --git a/app/dSYM.app/Contents/Resources/about.png b/wxPython/about.png old mode 100755 new mode 100644 similarity index 100% rename from app/dSYM.app/Contents/Resources/about.png rename to wxPython/about.png diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Python b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Python similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Python rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Python diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Resources b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Resources similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Resources rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Resources diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Python b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Python similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Python rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Python diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources/Info.plist b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources/Info.plist similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources/Info.plist rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/Resources/Info.plist diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7/pyconfig.h b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7/pyconfig.h similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7/pyconfig.h rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/2.7/include/python2.7/pyconfig.h diff --git a/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/Current b/wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/Current similarity index 100% rename from app/dSYM.app/Contents/Frameworks/Python.framework/Versions/Current rename to wxPython/app/dSYM.app/Contents/Frameworks/Python.framework/Versions/Current diff --git a/app/dSYM.app/Contents/Frameworks/libwx_osx_cocoau-3.0.0.0.0.dylib b/wxPython/app/dSYM.app/Contents/Frameworks/libwx_osx_cocoau-3.0.0.0.0.dylib similarity index 100% rename from app/dSYM.app/Contents/Frameworks/libwx_osx_cocoau-3.0.0.0.0.dylib rename to wxPython/app/dSYM.app/Contents/Frameworks/libwx_osx_cocoau-3.0.0.0.0.dylib diff --git a/app/dSYM.app/Contents/Info.plist b/wxPython/app/dSYM.app/Contents/Info.plist similarity index 100% rename from app/dSYM.app/Contents/Info.plist rename to wxPython/app/dSYM.app/Contents/Info.plist diff --git a/app/dSYM.app/Contents/MacOS/dSYM b/wxPython/app/dSYM.app/Contents/MacOS/dSYM similarity index 100% rename from app/dSYM.app/Contents/MacOS/dSYM rename to wxPython/app/dSYM.app/Contents/MacOS/dSYM diff --git a/app/dSYM.app/Contents/MacOS/python b/wxPython/app/dSYM.app/Contents/MacOS/python similarity index 100% rename from app/dSYM.app/Contents/MacOS/python rename to wxPython/app/dSYM.app/Contents/MacOS/python diff --git a/app/dSYM.app/Contents/PkgInfo b/wxPython/app/dSYM.app/Contents/PkgInfo similarity index 100% rename from app/dSYM.app/Contents/PkgInfo rename to wxPython/app/dSYM.app/Contents/PkgInfo diff --git a/app/dSYM.app/Contents/Resources/RunScript.py b/wxPython/app/dSYM.app/Contents/Resources/RunScript.py similarity index 100% rename from app/dSYM.app/Contents/Resources/RunScript.py rename to wxPython/app/dSYM.app/Contents/Resources/RunScript.py diff --git a/app/dSYM.app/Contents/Resources/__boot__.py b/wxPython/app/dSYM.app/Contents/Resources/__boot__.py similarity index 100% rename from app/dSYM.app/Contents/Resources/__boot__.py rename to wxPython/app/dSYM.app/Contents/Resources/__boot__.py diff --git a/app/dSYM.app/Contents/Resources/__error__.sh b/wxPython/app/dSYM.app/Contents/Resources/__error__.sh similarity index 100% rename from app/dSYM.app/Contents/Resources/__error__.sh rename to wxPython/app/dSYM.app/Contents/Resources/__error__.sh diff --git a/wxPython/app/dSYM.app/Contents/Resources/about.png b/wxPython/app/dSYM.app/Contents/Resources/about.png new file mode 100755 index 0000000..50f96d5 Binary files /dev/null and b/wxPython/app/dSYM.app/Contents/Resources/about.png differ diff --git a/avatar.jpg b/wxPython/app/dSYM.app/Contents/Resources/avatar.jpg similarity index 100% rename from avatar.jpg rename to wxPython/app/dSYM.app/Contents/Resources/avatar.jpg diff --git a/app/dSYM.app/Contents/Resources/dSYM.py b/wxPython/app/dSYM.app/Contents/Resources/dSYM.py similarity index 100% rename from app/dSYM.app/Contents/Resources/dSYM.py rename to wxPython/app/dSYM.app/Contents/Resources/dSYM.py diff --git a/app/dSYM.app/Contents/Resources/dSYMIcns.icns b/wxPython/app/dSYM.app/Contents/Resources/dSYMIcns.icns similarity index 100% rename from app/dSYM.app/Contents/Resources/dSYMIcns.icns rename to wxPython/app/dSYM.app/Contents/Resources/dSYMIcns.icns diff --git a/app/dSYM.app/Contents/Resources/dsym.db b/wxPython/app/dSYM.app/Contents/Resources/dsym.db similarity index 100% rename from app/dSYM.app/Contents/Resources/dsym.db rename to wxPython/app/dSYM.app/Contents/Resources/dsym.db diff --git a/app/dSYM.app/Contents/Resources/include/python2.7/pyconfig.h b/wxPython/app/dSYM.app/Contents/Resources/include/python2.7/pyconfig.h similarity index 100% rename from app/dSYM.app/Contents/Resources/include/python2.7/pyconfig.h rename to wxPython/app/dSYM.app/Contents/Resources/include/python2.7/pyconfig.h diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/MacOS.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/Nav.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_AE.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Ctl.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Dlg.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Evt.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_File.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Menu.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Qd.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Res.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_Win.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_cn.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_hk.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_iso2022.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_jp.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_kr.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_codecs_tw.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_collections.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_functools.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_hashlib.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_heapq.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_io.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_locale.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_multibytecodec.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_random.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_scproxy.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_socket.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_sqlite3.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_sqlite3.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_sqlite3.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_sqlite3.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_ssl.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/_struct.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/array.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/array.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/array.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/array.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/binascii.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/bz2.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cPickle.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/cStringIO.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/datetime.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/fcntl.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/gestalt.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/grp.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/itertools.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/math.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/math.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/math.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/math.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/operator.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/parser.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/pyexpat.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/resource.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/select.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/select.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/select.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/select.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/strop.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/termios.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/time.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/time.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/time.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/time.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/unicodedata.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_controls_.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_controls_.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_controls_.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_controls_.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_core_.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_gdi_.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_gdi_.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_gdi_.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_gdi_.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_misc_.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_misc_.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_misc_.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_misc_.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_windows_.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_windows_.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_windows_.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/wx/_windows_.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/lib-dynload/zlib.so diff --git a/app/dSYM.app/Contents/Resources/lib/python2.7/site-packages.zip b/wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/site-packages.zip similarity index 100% rename from app/dSYM.app/Contents/Resources/lib/python2.7/site-packages.zip rename to wxPython/app/dSYM.app/Contents/Resources/lib/python2.7/site-packages.zip diff --git a/wxPython/avatar.jpg b/wxPython/avatar.jpg new file mode 100755 index 0000000..60819c1 Binary files /dev/null and b/wxPython/avatar.jpg differ diff --git a/dSYM.py b/wxPython/dSYM.py similarity index 100% rename from dSYM.py rename to wxPython/dSYM.py diff --git a/dSYMIcns.icns b/wxPython/dSYMIcns.icns similarity index 100% rename from dSYMIcns.icns rename to wxPython/dSYMIcns.icns diff --git a/donate.png b/wxPython/donate.png similarity index 100% rename from donate.png rename to wxPython/donate.png diff --git a/dsym.db b/wxPython/dsym.db similarity index 100% rename from dsym.db rename to wxPython/dsym.db diff --git a/setup.py b/wxPython/setup.py similarity index 100% rename from setup.py rename to wxPython/setup.py