[
  {
    "path": ".gitignore",
    "content": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n## Build generated\nbuild/\nDerivedData/\n\n## Various settings\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!default.perspectivev3\nxcuserdata/\n\n## Other\n*.moved-aside\n*.xccheckout\n*.xcscmblueprint\n\n## Obj-C/Swift specific\n*.hmap\n*.ipa\n*.dSYM.zip\n*.dSYM\n\n# CocoaPods\n#\n# We recommend against adding the Pods directory to your .gitignore. However\n# you should judge for yourself, the pros and cons are mentioned at:\n# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control\n#\n# Pods/\n\n# Carthage\n#\n# Add this line if you want to avoid checking in source code from Carthage dependencies.\n# Carthage/Checkouts\n\nCarthage/Build\n\n# fastlane\n#\n# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the\n# screenshots whenever they are needed.\n# For more information about the recommended setup visit:\n# https://docs.fastlane.tools/best-practices/source-control/#source-control\n\nfastlane/report.xml\nfastlane/Preview.html\nfastlane/screenshots\nfastlane/test_output\n\n# Code Injection\n#\n# After new code Injection tools there's a generated folder /iOSInjectionProject\n# https://github.com/johnno1962/injectionforxcode\n\niOSInjectionProject/\n"
  },
  {
    "path": "LICENSE",
    "content": ""
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:5.3\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"WoodpeckeriOS\",\n    \n    platforms: [.iOS(SupportedPlatform.IOSVersion.v11)],\n    \n    products: [\n        // Products define the executables and libraries a package produces, and make them visible to other packages.\n        .library(\n            name: \"WoodpeckeriOS\",\n            targets: [\"WoodPeckeriOS\"]),\n    ],\n    \n    dependencies: [\n        // Dependencies declare other packages that this package depends on.\n        // .package(url: /* package url */, from: \"1.0.0\"),\n\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package. A target can define a module or a test suite.\n        // Targets can depend on other targets in this package, and on products in packages this package depends on.\n        .target(\n            name: \"WoodpeckeriOS\",\n            dependencies: []),\n        .testTarget(\n            name: \"WoodpeckeriOSTests\",\n            dependencies: [\"WoodpeckeriOS\"]),\n        \n        .binaryTarget(\n            name: \"WoodPeckeriOS\",\n            path: \"WoodPeckeriOS.xcframework\"),\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "\n![logo](http://www.woodpeck.cn/assets/img/logo.png)\n\nHi! this is a demo app for **Woodpecker** ([open source](https://github.com/appwoodpecker/woodpecker-client))\n\n**Woodpecker** is a tool for iOS, MacOS developer, it provides some handy and productive tools which Xcode doesn't. \n\nIt can helps you:\n\n - view, modify sandbox files;\n - view UserDefaults items;\n - view controller hierarchy;\n - debug webview online;\n - monitor network;\n - more...\n\nFree download at [App Store](https://itunes.apple.com/cn/app/woodpecker/id1333548463?l=en&mt=12)\nand talk with us at [Telegram](https://t.me/appwoodpecker) or [QQ(303015262) ](https://jq.qq.com/?_wv=1027&k=QXuhxDs0)\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/AppDelegate.h",
    "content": "//\n//  AppDelegate.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate>\n\n@property (strong, nonatomic) UIWindow *window;\n\n\n@end\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/AppDelegate.m",
    "content": "//\n//  AppDelegate.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"AppDelegate.h\"\n#import \"IndexViewController.h\"\n@import UserNotifications;\n\n@interface AppDelegate ()<UNUserNotificationCenterDelegate>\n\n@end\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n    UIWindow * window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n    window.backgroundColor = [UIColor whiteColor];\n    IndexViewController * indexVC = [[IndexViewController alloc] init];\n    UINavigationController * nvc = [[UINavigationController alloc] initWithRootViewController:indexVC];\n    self.window = window;\n    self.window.rootViewController = nvc;\n    [self.window makeKeyAndVisible];\n    [self setupNotification];\n    return YES;\n}\n\n- (void)setupNotification {\n    if (@available(iOS 10.0, *)) {\n        UNUserNotificationCenter * notiCenter = [UNUserNotificationCenter currentNotificationCenter];\n        notiCenter.delegate = self;\n        UNNotificationAction *openAction = [UNNotificationAction actionWithIdentifier:UNNotificationDefaultActionIdentifier title:@\"Okay\" options:0];\n        UNNotificationAction *customAction = [UNNotificationAction actionWithIdentifier:@\"custum action\" title:@\"Do Something\" options:0];\n        UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@\"actionCategory\" actions:@[openAction,customAction] intentIdentifiers:@[] options:0];\n        NSSet *set = [NSSet setWithObjects:category, nil];\n        [notiCenter setNotificationCategories:set];\n    }\n}\n\n/** The method will be called on the delegate only if the application is in the foreground. If the method is not implemented or the handler is not called in a timely manner then the notification will not be presented. The application can choose to have the notification presented as a sound, badge, alert and/or in the notification list. This decision should be based on whether the information in the notification is otherwise visible to the user.\n */\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler\nAPI_AVAILABLE(ios(10.0)){\n    NSLog(@\"will present notification\");\n    completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionBadge);\n}\n\n/** The method will be called on the delegate when the user responded to the notification by opening the application, dismissing the notification or choosing a UNNotificationAction. The delegate must be set before the application returns from application:didFinishLaunchingWithOptions:.\n */\n- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler\nAPI_AVAILABLE(ios(10.0)){\n    NSLog(@\"did receive notification response\");\n    completionHandler();\n}\n\n\n- (void)applicationWillResignActive:(UIApplication *)application {\n    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n    // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n}\n\n\n- (void)applicationDidEnterBackground:(UIApplication *)application {\n    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n}\n\n\n- (void)applicationWillEnterForeground:(UIApplication *)application {\n    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n}\n\n\n- (void)applicationDidBecomeActive:(UIApplication *)application {\n    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n}\n\n\n- (void)applicationWillTerminate:(UIApplication *)application {\n    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n}\n\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"120.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"180.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"76.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"152.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"167.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"pre-rendered\" : true\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"33.125\" y=\"416.87499999999994\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(MARKETING_VERSION)</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>NSBonjourServices</key>\n\t<array>\n\t\t<string>_adhp._tcp</string>\n\t</array>\n\t<key>NSLocalNetworkUsageDescription</key>\n\t<string>Debug my app</string>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Console/ConsoleViewController.h",
    "content": "//\n//  ConsoleViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/6/9.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ConsoleViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Console/ConsoleViewController.m",
    "content": "//\n//  ConsoleViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/6/9.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"ConsoleViewController.h\"\n\n@interface ConsoleViewController ()\n\n@property (nonatomic, strong) NSTimer *timer;\n@property (nonatomic, assign) NSInteger count;\n@property (weak, nonatomic) IBOutlet UIButton *countButton;\n\n@end\n\n@implementation ConsoleViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    self.count = 0;\n    [self updateTimerCountButtonUI];\n}\n\n- (IBAction)logButtonPressed:(id)sender {\n    [self logCount];\n    NSLog(@\"Woodpecker home page: http://www.woodpeck.cn, \\nContact me: woodpeckerapp@163.com\");\n}\n\n- (IBAction)counterLogButtonPressed:(id)sender {\n    if(!self.timer) {\n        self.timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(logCount) userInfo:nil repeats:YES];\n    }else {\n        [self.timer invalidate];\n        self.timer = nil;\n    }\n    [self updateTimerCountButtonUI];\n}\n\n- (void)updateTimerCountButtonUI {\n    if(self.timer) {\n        [self.countButton setTitle:@\"Stop\" forState:UIControlStateNormal];\n    }else {\n        [self.countButton setTitle:@\"Start Count\" forState:UIControlStateNormal];\n    }\n}\n\n- (void)logCount {\n    NSLog(@\"count:  %zd\",self.count++);\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n}\n\n@end\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Console/ConsoleViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ConsoleViewController\">\n            <connections>\n                <outlet property=\"countButton\" destination=\"xEV-Rd-gw9\" id=\"Yow-et-5UR\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Console\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"6cv-cp-XcY\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_io\" id=\"pUN-bE-LJs\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"DnB-VS-Fxw\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"167\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">With this tool, we can view app's console log in Woodpecker, Console is part of tool I/O, try log something, and view them at mac.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"HSj-Le-T6z\">\n                    <rect key=\"frame\" x=\"16\" y=\"361\" width=\"283\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Log something\"/>\n                    <connections>\n                        <action selector=\"logButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"fXm-HO-zJ3\"/>\n                    </connections>\n                </button>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"xEV-Rd-gw9\">\n                    <rect key=\"frame\" x=\"16\" y=\"426\" width=\"283\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Start Count\"/>\n                    <connections>\n                        <action selector=\"counterLogButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"Rly-5G-teB\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"34\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_io\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Controller/ControllerHierarchyViewController.h",
    "content": "//\n//  ControllerHierarchyViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/5/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface ControllerHierarchyViewController : UIViewController\n\n@property (nonatomic, assign) NSInteger pageIndex;\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Controller/ControllerHierarchyViewController.m",
    "content": "//\n//  ControllerHierarchyViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/5/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"ControllerHierarchyViewController.h\"\n\n@interface ControllerHierarchyViewController ()\n\n@end\n\n@implementation ControllerHierarchyViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    self.navigationItem.title = [NSString stringWithFormat:@\"Page %zd\",self.pageIndex];\n}\n\n- (IBAction)nextButtonPressed:(id)sender {\n    ControllerHierarchyViewController *nextVC = [[ControllerHierarchyViewController alloc] init];\n    nextVC.pageIndex = self.pageIndex+1;\n    [self.navigationController pushViewController:nextVC animated:YES];\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Controller/ControllerHierarchyViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"ControllerHierarchyViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"Controller\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"ZYK-d9-roh\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" image=\"tool_io\" id=\"vZ3-ph-xXJ\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"Help you app's view controller hierarchy in graph. Try push a new page, then view the change in the 'Controller' tool.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"vDh-VS-hQQ\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"114\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"dq0-h9-uMw\">\n                    <rect key=\"frame\" x=\"46\" y=\"367\" width=\"228\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Push\"/>\n                    <connections>\n                        <action selector=\"nextButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"lZY-cg-Bon\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"34\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_io\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Device/DeviceInfoViewController.h",
    "content": "//\n//  DeviceInfoViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/3/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface DeviceInfoViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Device/DeviceInfoViewController.m",
    "content": "//\n//  DeviceInfoViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/3/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"DeviceInfoViewController.h\"\n\n@interface DeviceInfoViewController ()\n\n@end\n\n@implementation DeviceInfoViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)actionButton:(id)sender {\n    NSString * message = @\"click me on Mac or iPhone ?\";\n    UIAlertController * alert = [UIAlertController alertControllerWithTitle:@\"Alert\" message:message preferredStyle:UIAlertControllerStyleAlert];\n    UIAlertAction * cancel = [UIAlertAction actionWithTitle:@\"iPhone\" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {\n        self.view.backgroundColor = [UIColor grayColor];\n    }];\n    UIAlertAction * confirm = [UIAlertAction actionWithTitle:@\"Mac\" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {\n        float red = arc4random() % 255 / 255.0f;\n        float green = arc4random() % 255 / 255.0f;\n        float blue = arc4random() % 255 / 255.0f;\n        self.view.backgroundColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];\n    }];\n    [alert addAction:cancel];\n    [alert addAction:confirm];\n    [self presentViewController:alert animated:YES completion:nil];\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n}\n\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Device/DeviceInfoViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"DeviceInfoViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Device\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"chh-Lr-VPh\">\n                    <rect key=\"frame\" x=\"64\" y=\"93\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_device\" id=\"21w-jg-zUW\">\n                    <rect key=\"frame\" x=\"16\" y=\"96\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"31x-Un-9TX\">\n                    <rect key=\"frame\" x=\"16\" y=\"164\" width=\"343\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">1. real time screen synchronizes;\n2. view app's environment information, such as, system version, screen resolution, country and language.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"u2R-6s-Sp4\">\n                    <rect key=\"frame\" x=\"72\" y=\"319\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"I`m a button\"/>\n                    <connections>\n                        <action selector=\"actionButton:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"KtK-2K-3KH\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"35.5\" y=\"54.5\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_device\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/IO/EchoService.h",
    "content": "//\n//  EchoService.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <WoodPeckeriOS/WoodPeckeriOS.h>\n\n/**\n show how to create a custom service\n \n http://www.woodpeck.cn/plugin.html\n */\n@interface EchoService : ADHService\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/IO/EchoService.m",
    "content": "//\n//  EchoService.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"EchoService.h\"\n\n@implementation EchoService\n\n+ (void)load {\n    [[ADHOrganizer sharedOrganizer] registerService:[EchoService class]];\n}\n\n+ (NSString *)serviceName {\n    return @\"adh.EchoService\";\n}\n\n+ (NSDictionary<NSString*,NSString *> *)actionList {\n    return @{\n             @\"echo\" : NSStringFromSelector(@selector(onRequestEcho:)),\n             };\n}\n\n- (void)onRequestEcho: (ADHRequest *)request {\n    NSDictionary * data = @{\n                            @\"response\" : @\"hi, I`m App, What`s up\",\n                            };\n    [request finishWithBody:data];\n}\n\n@end\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/IO/IOViewController.h",
    "content": "//\n//  IOViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface IOViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/IO/IOViewController.m",
    "content": "//\n//  IOViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"IOViewController.h\"\n#import \"WoodPeckeriOS/WoodPeckeriOS.h\"\n#import \"EchoService.h\"\n\n@interface IOViewController ()\n\n@end\n\n@implementation IOViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)logButtonPressed:(id)sender {\n    NSString * text = @\"A channel between mac and your app, you can transfer data, call service in you app, or log message to mac client,  try log something, or you create a custom ADHService\";\n    // log to mac\n    [[ADHLogger sharedLogger] logText:text];\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n}\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/IO/IOViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"IOViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"I/O\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5cJ-ca-QGy\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" image=\"tool_io\" id=\"cBi-fg-4hu\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1OL-7N-Mid\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"167\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">A channel between mac and your app. you can log message to mac client from app or call service in you app from mac, demo implements a  custom service called \"EchoService\" to show how to  custom a service.    try log something to mac.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Se0-oa-OyA\">\n                    <rect key=\"frame\" x=\"16\" y=\"361\" width=\"283\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"log text to mac client\"/>\n                    <connections>\n                        <action selector=\"logButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"X84-4E-YkC\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"33\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_io\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Network/NetworkViewController.h",
    "content": "//\n//  NetworkViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface NetworkViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Network/NetworkViewController.m",
    "content": "//\n//  NetworkViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"NetworkViewController.h\"\n\n@interface NetworkViewController ()<NSURLConnectionDataDelegate, NSURLSessionDataDelegate>\n\n@end\n\n@implementation NetworkViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)startRequest:(id)sender {\n    //url connection\n    NSURL * requestURL = [NSURL URLWithString:@\"https://api.github.com\"];\n    NSURLRequest * request = [NSURLRequest requestWithURL:requestURL];\n    NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];\n    [connection start];\n    \n    //url session\n    [self sessionRequest];\n}\n\n- (void)sessionRequest\n{\n    // NSURLSession\n    NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];\n    config.timeoutIntervalForRequest = 10.0;\n    NSURLSession *mySession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];\n    NSString * url = @\"https://api.github.com/emojis\";\n    NSURL * requestURL = [NSURL URLWithString:url];\n    NSMutableURLRequest * uploadRequest = [NSMutableURLRequest requestWithURL:requestURL];\n    uploadRequest.HTTPMethod = @\"POST\";\n    NSString * formText = [NSString stringWithFormat:@\"q=%.f\",[[NSDate date] timeIntervalSince1970]];\n    NSData * data = [formText dataUsingEncoding:NSUTF8StringEncoding];\n    NSURLSessionTask * task = [mySession uploadTaskWithRequest:uploadRequest fromData:data completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {\n        \n    }];\n    [task resume];\n}\n\n- (nullable NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(nullable NSURLResponse *)response\n{\n    return request;\n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response\n{\n    \n}\n\n- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data\n{\n    \n}\n\n- (void)connection:(NSURLConnection *)connection\n   didSendBodyData:(NSInteger)bytesWritten\n totalBytesWritten:(NSInteger)totalBytesWritten\ntotalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite\n{\n    \n}\n\n- (void)connectionDidFinishLoading:(NSURLConnection *)connection\n{\n    \n}\n\n- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler\n{\n    completionHandler(NSURLSessionResponseAllow);\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n    // Dispose of any resources that can be recreated.\n}\n\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Network/NetworkViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"NetworkViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Network\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kAk-tp-3Is\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_network\" id=\"lyw-21-RJB\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Jeb-W6-ffi\">\n                    <rect key=\"frame\" x=\"45\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"start a request\"/>\n                    <connections>\n                        <action selector=\"startRequest:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"N9w-kJ-yaE\"/>\n                    </connections>\n                </button>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"it helps you monitor any network request send from you app, supports http(s).  try start a network request.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"ahB-A1-PSI\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"34\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_network\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Notification/NotificationViewController.h",
    "content": "//\n//  NotificationViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/6/4.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface NotificationViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Notification/NotificationViewController.m",
    "content": "//\n//  NotificationViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/6/4.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"NotificationViewController.h\"\n@import UserNotifications;\n\n@interface NotificationViewController ()\n\n@end\n\n@implementation NotificationViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)fireButtonPressed:(id)sender {\n    if (@available(iOS 10.0, *)) {\n        UNUserNotificationCenter * notiCenter = [UNUserNotificationCenter currentNotificationCenter];\n        [notiCenter requestAuthorizationWithOptions:(UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) {\n            if(granted){\n                UNUserNotificationCenter * notiCenter = [UNUserNotificationCenter currentNotificationCenter];\n                NSString * identifier = [NSString stringWithFormat:@\"%d\",arc4random()];\n                NSString * requestIdentifier = [NSString stringWithFormat:@\"request identifier%@\",identifier];\n                UNMutableNotificationContent * content = [[UNMutableNotificationContent alloc] init];\n                content.badge = [NSNumber numberWithInteger:arc4random()%10];\n                content.body = [NSString stringWithFormat:@\"Thanks for using woodpecker %@\",identifier];\n                content.title = [NSString stringWithFormat:@\"This is title %@\",identifier];\n                content.subtitle = [NSString stringWithFormat:@\"This is subtitle %@\",identifier];\n                content.userInfo = @{\n                                     @\"identifier\" : identifier,\n                                     };\n                content.categoryIdentifier = @\"actionCategory\";\n                UNTimeIntervalNotificationTrigger * trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:3 repeats:NO];\n                UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:requestIdentifier content:content trigger:trigger];\n                [notiCenter addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {\n                    if(error){\n                        NSLog(@\"add local notification error: %@\",error);\n                    }else{\n                        NSLog(@\"add local notification success\");\n                    }\n                }];\n            }else{\n                NSLog(@\"not granted. error: %@\",error);\n            }\n        }];\n    } else {\n        NSString *message = @\"Sorry, this tool only support iOS 10+\";\n        UIAlertController * alert = [UIAlertController alertControllerWithTitle:@\"Alert\" message:message preferredStyle:UIAlertControllerStyleAlert];\n        UIAlertAction * confirm = [UIAlertAction actionWithTitle:@\"Ok\" style:UIAlertActionStyleDefault handler:nil];\n        [alert addAction:confirm];\n        [self presentViewController:alert animated:YES completion:nil];\n    }\n}\n\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n}\n\n@end\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Notification/NotificationViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"NotificationViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"sZZ-R7-0n9\">\n                    <rect key=\"frame\" x=\"72\" y=\"308\" width=\"175\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Fire a notification\"/>\n                    <connections>\n                        <action selector=\"fireButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"tz7-2S-eZg\"/>\n                    </connections>\n                </button>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Notification\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"9Dv-cc-ZzA\">\n                    <rect key=\"frame\" x=\"64\" y=\"93\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_notification\" id=\"vzc-bR-JWE\">\n                    <rect key=\"frame\" x=\"16\" y=\"96\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"gMh-Vm-ws5\">\n                    <rect key=\"frame\" x=\"16\" y=\"164\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">Debugging Notifications without any breakpoint, support APNS and local notification,  Try fire a local notification, you will receive at Mac client after 3 seconds</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"34\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_notification\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Sandbox/SandBoxViewController.h",
    "content": "//\n//  SandBoxViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface SandBoxViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Sandbox/SandBoxViewController.m",
    "content": "//\n//  SandBoxViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"SandBoxViewController.h\"\n\n@interface SandBoxViewController ()\n\n@end\n\n@implementation SandBoxViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)addFileButtonPressed:(id)sender {\n    NSDateFormatter * formatter = [[NSDateFormatter alloc] init];\n    [formatter setDateFormat:@\"yyyy-MM-dd HH:mm:ss\"];\n    NSDate * date = [NSDate date];\n    NSString * text = [formatter stringFromDate:date];\n    //file name\n    [formatter setDateFormat:@\"HH-mm-ss\"];\n    NSString * fileName = [NSString stringWithFormat:@\"%@.txt\",[formatter stringFromDate:date]];\n    NSString * documentPath = [NSHomeDirectory() stringByAppendingPathComponent:@\"Documents\"];\n    NSString * filePath = [documentPath stringByAppendingPathComponent:fileName];\n    NSURL * fileURL = [NSURL fileURLWithPath:filePath];\n    NSError * error = nil;\n    [text writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:&error];\n}\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n\n}\n\n\n@end\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/Sandbox/SandBoxViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14109\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14088\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"SandBoxViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"SandBox\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"0g5-tf-HtM\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" image=\"tool_sandbox\" id=\"hur-4q-QnE\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5dQ-sG-Upg\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">it makes you, view, modify sandbox file (files in Document, Library, tmp) so easiliy.   try add a file, then click mac client`s SandBox refresh button.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Gqp-eS-p9u\">\n                    <rect key=\"frame\" x=\"45\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Add a File\"/>\n                    <connections>\n                        <action selector=\"addFileButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"gKL-ze-Gmf\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"33.5\" y=\"53.5\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_sandbox\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/UserDefaults/UserDefaultsViewController.h",
    "content": "//\n//  UserDefaultsViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/3/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface UserDefaultsViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/UserDefaults/UserDefaultsViewController.m",
    "content": "//\n//  UserDefaultsViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/3/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"UserDefaultsViewController.h\"\n\n@interface UserDefaultsViewController ()\n\n@end\n\n@implementation UserDefaultsViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n}\n\n- (IBAction)addButtonPressed:(id)sender {\n    NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];\n    NSString * key = [NSString stringWithFormat:@\"key%d\",arc4random()];\n    NSString * value = [NSString stringWithFormat:@\"value%d\",arc4random()];\n    [userDefaults setObject:value forKey:key];\n    [userDefaults synchronize];\n}\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Modules/UserDefaults/UserDefaultsViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"UserDefaultsViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"UserDefaults\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"BXk-Xi-fvY\">\n                    <rect key=\"frame\" x=\"64\" y=\"93\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_userdefaults\" id=\"Piq-DM-lCA\">\n                    <rect key=\"frame\" x=\"16\" y=\"96\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"help view, modify User Defaults data in Mac, simple and intuitional.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"jwF-ee-Kq2\">\n                    <rect key=\"frame\" x=\"16\" y=\"164\" width=\"343\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"4EK-mW-GCZ\">\n                    <rect key=\"frame\" x=\"72\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Add UserDefault Item\"/>\n                    <connections>\n                        <action selector=\"addButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"Ay8-sQ-ZAN\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"35.5\" y=\"54.5\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_userdefaults\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Structure/IndexViewController.h",
    "content": "//\n//  IndexViewController.h\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n@interface IndexViewController : UIViewController\n\n@end\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Structure/IndexViewController.m",
    "content": "//\n//  IndexViewController.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import \"IndexViewController.h\"\n#import \"SandBoxViewController.h\"\n#import \"NetworkViewController.h\"\n#import \"IOViewController.h\"\n#import \"UserDefaultsViewController.h\"\n#import \"DeviceInfoViewController.h\"\n#import \"ControllerHierarchyViewController.h\"\n#import \"NotificationViewController.h\"\n#import \"ConsoleViewController.h\"\n\nstatic NSString * const kIndexCellIdentifier = @\"kIndexCellIdentifier\";\n\n@interface IndexViewController ()<UITableViewDataSource,UITableViewDelegate>\n\n\n@property (nonatomic, strong) NSArray * actionList;\n@property (weak, nonatomic) IBOutlet UITableView *tableView;\n\n@end\n\n@implementation IndexViewController\n\n- (void)viewDidLoad {\n    [super viewDidLoad];\n    self.navigationItem.title = @\"Woodpecker Demo\";\n    self.tableView.rowHeight = 60.0f;\n    [self loadData];\n}\n\n- (void)loadData\n{\n    self.actionList = @[\n                        @{\n                            @\"title\" : @\"Sandbox\",\n                            @\"action\" : NSStringFromSelector(@selector(sandBox)),\n                            },\n                        @{\n                            @\"title\" : @\"Network\",\n                            @\"action\" : NSStringFromSelector(@selector(network)),\n                            },\n                        @{\n                            @\"title\" : @\"I/O\",\n                            @\"action\" : NSStringFromSelector(@selector(doIO)),\n                            },\n                        @{\n                            @\"title\" : @\"Console\",\n                            @\"action\" : NSStringFromSelector(@selector(console)),\n                            },\n                        @{\n                            @\"title\" : @\"UserDefaults\",\n                            @\"action\" : NSStringFromSelector(@selector(userDefaults)),\n                            },\n                        @{\n                            @\"title\" : @\"Device\",\n                            @\"action\" : NSStringFromSelector(@selector(device)),\n                            },\n                        @{\n                            @\"title\" : @\"Controller Hierarchy\",\n                            @\"action\" : NSStringFromSelector(@selector(controller)),\n                            },\n                        @{\n                            @\"title\" : @\"Notification\",\n                            @\"action\" : NSStringFromSelector(@selector(notification)),\n                            },\n                        \n                        \n                       ];\n}\n\n\n- (void)sandBox\n{\n    SandBoxViewController * vc = [[SandBoxViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)network\n{\n    NetworkViewController * vc = [[NetworkViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)doIO\n{\n    IOViewController * vc = [[IOViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)console {\n    ConsoleViewController *vc = [[ConsoleViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)userDefaults\n{\n    UserDefaultsViewController * vc = [[UserDefaultsViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)device\n{\n    DeviceInfoViewController * vc = [[DeviceInfoViewController alloc] init];\n    [self.navigationController pushViewController:vc animated:YES];\n}\n\n- (void)controller {\n    ControllerHierarchyViewController *nextVC = [[ControllerHierarchyViewController alloc] init];\n    nextVC.pageIndex = 0;\n    [self.navigationController pushViewController:nextVC animated:YES];\n}\n\n- (void)notification {\n    NotificationViewController *notificationVC = [[NotificationViewController alloc] init];\n    [self.navigationController pushViewController:notificationVC animated:YES];\n}\n\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section\n{\n    return self.actionList.count;\n}\n\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:kIndexCellIdentifier];\n    if(!cell){\n        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kIndexCellIdentifier];\n    }\n    NSDictionary * data = self.actionList[indexPath.row];\n    NSString * title = data[@\"title\"];\n    cell.textLabel.text = title;\n    return cell;\n}\n\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath\n{\n    NSDictionary * data = self.actionList[indexPath.row];\n    SEL selector = NSSelectorFromString(data[@\"action\"]);\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Warc-performSelector-leaks\"\n    [self performSelector:selector];\n#pragma clang diagnostic pop\n    [tableView deselectRowAtIndexPath:indexPath animated:NO];\n    \n}\n\n\n\n- (void)didReceiveMemoryWarning {\n    [super didReceiveMemoryWarning];\n}\n\n\n\n@end\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/Structure/IndexViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"IndexViewController\">\n            <connections>\n                <outlet property=\"tableView\" destination=\"Rb9-Jy-XAt\" id=\"qXr-j0-y15\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" misplaced=\"YES\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"Rb9-Jy-XAt\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"y4F-dV-ndT\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"chP-nD-Njd\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"33.5\" y=\"53.5\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_device.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_device.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_io.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_io.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_network.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_network.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_notification.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_notification.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_sandbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_sandbox.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_userdefaults.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_userdefaults.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/images.xcassets/tool_webconsole.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_webconsole.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo/main.m",
    "content": "//\n//  main.m\n//  WoodPeckerDemo\n//\n//  Created by xiaogang zhang on 2018/1/17.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n    @autoreleasepool {\n        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n    }\n}\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 52;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1F3A946420C570C7008AE09A /* NotificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F3A946220C570C7008AE09A /* NotificationViewController.m */; };\n\t\t1F3A946520C570C7008AE09A /* NotificationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F3A946320C570C7008AE09A /* NotificationViewController.xib */; };\n\t\t1F46EBE120CBEA980037445F /* ConsoleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F46EBDF20CBEA980037445F /* ConsoleViewController.m */; };\n\t\t1F46EBE220CBEA980037445F /* ConsoleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F46EBE020CBEA980037445F /* ConsoleViewController.xib */; };\n\t\t1F66F00426D25BDB00ADBBBE /* WoodPeckeriOS.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F66F00226D25BD600ADBBBE /* WoodPeckeriOS.xcframework */; };\n\t\t1F66F00526D25BDB00ADBBBE /* WoodPeckeriOS.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1F66F00226D25BD600ADBBBE /* WoodPeckeriOS.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t1F9DC462200F83C700DFC64E /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC461200F83C700DFC64E /* AppDelegate.m */; };\n\t\t1F9DC46A200F83C700DFC64E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC469200F83C700DFC64E /* Assets.xcassets */; };\n\t\t1F9DC46D200F83C700DFC64E /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC46B200F83C700DFC64E /* LaunchScreen.storyboard */; };\n\t\t1F9DC470200F83C700DFC64E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC46F200F83C700DFC64E /* main.m */; };\n\t\t1F9DC47B200F846100DFC64E /* IndexViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC479200F846100DFC64E /* IndexViewController.m */; };\n\t\t1F9DC47C200F846100DFC64E /* IndexViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC47A200F846100DFC64E /* IndexViewController.xib */; };\n\t\t1F9DC484200F8BBE00DFC64E /* SandBoxViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC482200F8BBE00DFC64E /* SandBoxViewController.m */; };\n\t\t1F9DC485200F8BBE00DFC64E /* SandBoxViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC483200F8BBE00DFC64E /* SandBoxViewController.xib */; };\n\t\t1F9DC487200F914100DFC64E /* images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC486200F914100DFC64E /* images.xcassets */; };\n\t\t1F9DC495200F94FB00DFC64E /* NetworkViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC493200F94FB00DFC64E /* NetworkViewController.m */; };\n\t\t1F9DC496200F94FB00DFC64E /* NetworkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC494200F94FB00DFC64E /* NetworkViewController.xib */; };\n\t\t1F9DC49A200F99C300DFC64E /* IOViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC498200F99C300DFC64E /* IOViewController.m */; };\n\t\t1F9DC49B200F99C300DFC64E /* IOViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F9DC499200F99C300DFC64E /* IOViewController.xib */; };\n\t\t1F9DC49E200F9AF400DFC64E /* EchoService.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F9DC49D200F9AF400DFC64E /* EchoService.m */; };\n\t\t1FB43ABF20ADCA9E00BD5B85 /* ControllerHierarchyViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FB43ABD20ADCA9E00BD5B85 /* ControllerHierarchyViewController.m */; };\n\t\t1FB43AC020ADCA9E00BD5B85 /* ControllerHierarchyViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FB43ABE20ADCA9E00BD5B85 /* ControllerHierarchyViewController.xib */; };\n\t\t1FE5C58F205CC1CF000EC631 /* UserDefaultsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FE5C58D205CC1CF000EC631 /* UserDefaultsViewController.m */; };\n\t\t1FE5C590205CC1CF000EC631 /* UserDefaultsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FE5C58E205CC1CF000EC631 /* UserDefaultsViewController.xib */; };\n\t\t1FE5C595205CC35D000EC631 /* DeviceInfoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FE5C593205CC35D000EC631 /* DeviceInfoViewController.m */; };\n\t\t1FE5C596205CC35D000EC631 /* DeviceInfoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1FE5C594205CC35D000EC631 /* DeviceInfoViewController.xib */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t1F06B75C21736E02000CAD80 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t1F66F00526D25BDB00ADBBBE /* WoodPeckeriOS.xcframework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1F3A946120C570C7008AE09A /* NotificationViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NotificationViewController.h; sourceTree = \"<group>\"; };\n\t\t1F3A946220C570C7008AE09A /* NotificationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationViewController.m; sourceTree = \"<group>\"; };\n\t\t1F3A946320C570C7008AE09A /* NotificationViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NotificationViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F46EBDE20CBEA980037445F /* ConsoleViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConsoleViewController.h; sourceTree = \"<group>\"; };\n\t\t1F46EBDF20CBEA980037445F /* ConsoleViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConsoleViewController.m; sourceTree = \"<group>\"; };\n\t\t1F46EBE020CBEA980037445F /* ConsoleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ConsoleViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F66F00226D25BD600ADBBBE /* WoodPeckeriOS.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WoodPeckeriOS.xcframework; path = ../WoodPeckeriOS.xcframework; sourceTree = \"<group>\"; };\n\t\t1F9DC45D200F83C700DFC64E /* WoodPeckerDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WoodPeckerDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F9DC460200F83C700DFC64E /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t1F9DC461200F83C700DFC64E /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t1F9DC469200F83C700DFC64E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t1F9DC46C200F83C700DFC64E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t1F9DC46E200F83C700DFC64E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F9DC46F200F83C700DFC64E /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t1F9DC478200F846100DFC64E /* IndexViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IndexViewController.h; sourceTree = \"<group>\"; };\n\t\t1F9DC479200F846100DFC64E /* IndexViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IndexViewController.m; sourceTree = \"<group>\"; };\n\t\t1F9DC47A200F846100DFC64E /* IndexViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IndexViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F9DC481200F8BBE00DFC64E /* SandBoxViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SandBoxViewController.h; sourceTree = \"<group>\"; };\n\t\t1F9DC482200F8BBE00DFC64E /* SandBoxViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SandBoxViewController.m; sourceTree = \"<group>\"; };\n\t\t1F9DC483200F8BBE00DFC64E /* SandBoxViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SandBoxViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F9DC486200F914100DFC64E /* images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = images.xcassets; sourceTree = \"<group>\"; };\n\t\t1F9DC492200F94FB00DFC64E /* NetworkViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NetworkViewController.h; sourceTree = \"<group>\"; };\n\t\t1F9DC493200F94FB00DFC64E /* NetworkViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NetworkViewController.m; sourceTree = \"<group>\"; };\n\t\t1F9DC494200F94FB00DFC64E /* NetworkViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NetworkViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F9DC497200F99C300DFC64E /* IOViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IOViewController.h; sourceTree = \"<group>\"; };\n\t\t1F9DC498200F99C300DFC64E /* IOViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IOViewController.m; sourceTree = \"<group>\"; };\n\t\t1F9DC499200F99C300DFC64E /* IOViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = IOViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F9DC49C200F9AF400DFC64E /* EchoService.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EchoService.h; sourceTree = \"<group>\"; };\n\t\t1F9DC49D200F9AF400DFC64E /* EchoService.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EchoService.m; sourceTree = \"<group>\"; };\n\t\t1FB43ABC20ADCA9E00BD5B85 /* ControllerHierarchyViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ControllerHierarchyViewController.h; sourceTree = \"<group>\"; };\n\t\t1FB43ABD20ADCA9E00BD5B85 /* ControllerHierarchyViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ControllerHierarchyViewController.m; sourceTree = \"<group>\"; };\n\t\t1FB43ABE20ADCA9E00BD5B85 /* ControllerHierarchyViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = ControllerHierarchyViewController.xib; sourceTree = \"<group>\"; };\n\t\t1FE5C58C205CC1CF000EC631 /* UserDefaultsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UserDefaultsViewController.h; sourceTree = \"<group>\"; };\n\t\t1FE5C58D205CC1CF000EC631 /* UserDefaultsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UserDefaultsViewController.m; sourceTree = \"<group>\"; };\n\t\t1FE5C58E205CC1CF000EC631 /* UserDefaultsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UserDefaultsViewController.xib; sourceTree = \"<group>\"; };\n\t\t1FE5C592205CC35D000EC631 /* DeviceInfoViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeviceInfoViewController.h; sourceTree = \"<group>\"; };\n\t\t1FE5C593205CC35D000EC631 /* DeviceInfoViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DeviceInfoViewController.m; sourceTree = \"<group>\"; };\n\t\t1FE5C594205CC35D000EC631 /* DeviceInfoViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = DeviceInfoViewController.xib; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F9DC45A200F83C700DFC64E /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F66F00426D25BDB00ADBBBE /* WoodPeckeriOS.xcframework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F3A946020C5709E008AE09A /* Notification */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F3A946120C570C7008AE09A /* NotificationViewController.h */,\n\t\t\t\t1F3A946220C570C7008AE09A /* NotificationViewController.m */,\n\t\t\t\t1F3A946320C570C7008AE09A /* NotificationViewController.xib */,\n\t\t\t);\n\t\t\tpath = Notification;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F46EBDD20CBEA880037445F /* Console */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F46EBDE20CBEA980037445F /* ConsoleViewController.h */,\n\t\t\t\t1F46EBDF20CBEA980037445F /* ConsoleViewController.m */,\n\t\t\t\t1F46EBE020CBEA980037445F /* ConsoleViewController.xib */,\n\t\t\t);\n\t\t\tpath = Console;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC454200F83C700DFC64E = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F66F00226D25BD600ADBBBE /* WoodPeckeriOS.xcframework */,\n\t\t\t\t1F9DC45F200F83C700DFC64E /* WoodPeckerDemo */,\n\t\t\t\t1F9DC45E200F83C700DFC64E /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC45E200F83C700DFC64E /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC45D200F83C700DFC64E /* WoodPeckerDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC45F200F83C700DFC64E /* WoodPeckerDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC476200F842A00DFC64E /* Modules */,\n\t\t\t\t1F9DC477200F843400DFC64E /* Structure */,\n\t\t\t\t1F9DC460200F83C700DFC64E /* AppDelegate.h */,\n\t\t\t\t1F9DC461200F83C700DFC64E /* AppDelegate.m */,\n\t\t\t\t1F9DC469200F83C700DFC64E /* Assets.xcassets */,\n\t\t\t\t1F9DC486200F914100DFC64E /* images.xcassets */,\n\t\t\t\t1F9DC46B200F83C700DFC64E /* LaunchScreen.storyboard */,\n\t\t\t\t1F9DC46E200F83C700DFC64E /* Info.plist */,\n\t\t\t\t1F9DC46F200F83C700DFC64E /* main.m */,\n\t\t\t);\n\t\t\tpath = WoodPeckerDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC476200F842A00DFC64E /* Modules */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F46EBDD20CBEA880037445F /* Console */,\n\t\t\t\t1F3A946020C5709E008AE09A /* Notification */,\n\t\t\t\t1FB43ABB20ADCA7600BD5B85 /* Controller */,\n\t\t\t\t1FE5C591205CC350000EC631 /* Device */,\n\t\t\t\t1FE5C58B205CC1B9000EC631 /* UserDefaults */,\n\t\t\t\t1F9DC47D200F872700DFC64E /* Sandbox */,\n\t\t\t\t1F9DC47E200F872C00DFC64E /* Network */,\n\t\t\t\t1F9DC47F200F873100DFC64E /* IO */,\n\t\t\t);\n\t\t\tpath = Modules;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC477200F843400DFC64E /* Structure */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC478200F846100DFC64E /* IndexViewController.h */,\n\t\t\t\t1F9DC479200F846100DFC64E /* IndexViewController.m */,\n\t\t\t\t1F9DC47A200F846100DFC64E /* IndexViewController.xib */,\n\t\t\t);\n\t\t\tpath = Structure;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC47D200F872700DFC64E /* Sandbox */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC481200F8BBE00DFC64E /* SandBoxViewController.h */,\n\t\t\t\t1F9DC482200F8BBE00DFC64E /* SandBoxViewController.m */,\n\t\t\t\t1F9DC483200F8BBE00DFC64E /* SandBoxViewController.xib */,\n\t\t\t);\n\t\t\tpath = Sandbox;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC47E200F872C00DFC64E /* Network */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC492200F94FB00DFC64E /* NetworkViewController.h */,\n\t\t\t\t1F9DC493200F94FB00DFC64E /* NetworkViewController.m */,\n\t\t\t\t1F9DC494200F94FB00DFC64E /* NetworkViewController.xib */,\n\t\t\t);\n\t\t\tpath = Network;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F9DC47F200F873100DFC64E /* IO */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC497200F99C300DFC64E /* IOViewController.h */,\n\t\t\t\t1F9DC498200F99C300DFC64E /* IOViewController.m */,\n\t\t\t\t1F9DC499200F99C300DFC64E /* IOViewController.xib */,\n\t\t\t\t1F9DC49C200F9AF400DFC64E /* EchoService.h */,\n\t\t\t\t1F9DC49D200F9AF400DFC64E /* EchoService.m */,\n\t\t\t);\n\t\t\tpath = IO;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FB43ABB20ADCA7600BD5B85 /* Controller */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FB43ABC20ADCA9E00BD5B85 /* ControllerHierarchyViewController.h */,\n\t\t\t\t1FB43ABD20ADCA9E00BD5B85 /* ControllerHierarchyViewController.m */,\n\t\t\t\t1FB43ABE20ADCA9E00BD5B85 /* ControllerHierarchyViewController.xib */,\n\t\t\t);\n\t\t\tpath = Controller;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FE5C58B205CC1B9000EC631 /* UserDefaults */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FE5C58C205CC1CF000EC631 /* UserDefaultsViewController.h */,\n\t\t\t\t1FE5C58D205CC1CF000EC631 /* UserDefaultsViewController.m */,\n\t\t\t\t1FE5C58E205CC1CF000EC631 /* UserDefaultsViewController.xib */,\n\t\t\t);\n\t\t\tpath = UserDefaults;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1FE5C591205CC350000EC631 /* Device */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1FE5C592205CC35D000EC631 /* DeviceInfoViewController.h */,\n\t\t\t\t1FE5C593205CC35D000EC631 /* DeviceInfoViewController.m */,\n\t\t\t\t1FE5C594205CC35D000EC631 /* DeviceInfoViewController.xib */,\n\t\t\t);\n\t\t\tpath = Device;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F9DC45C200F83C700DFC64E /* WoodPeckerDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F9DC473200F83C700DFC64E /* Build configuration list for PBXNativeTarget \"WoodPeckerDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F9DC459200F83C700DFC64E /* Sources */,\n\t\t\t\t1F9DC45A200F83C700DFC64E /* Frameworks */,\n\t\t\t\t1F9DC45B200F83C700DFC64E /* Resources */,\n\t\t\t\t1F06B75C21736E02000CAD80 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WoodPeckerDemo;\n\t\t\tproductName = WoodPeckerDemo;\n\t\t\tproductReference = 1F9DC45D200F83C700DFC64E /* WoodPeckerDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t1F9DC455200F83C700DFC64E /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = lifebetter;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F9DC45C200F83C700DFC64E = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1F9DC458200F83C700DFC64E /* Build configuration list for PBXProject \"WoodPeckerDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 1F9DC454200F83C700DFC64E;\n\t\t\tproductRefGroup = 1F9DC45E200F83C700DFC64E /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1F9DC45C200F83C700DFC64E /* WoodPeckerDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F9DC45B200F83C700DFC64E /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F46EBE220CBEA980037445F /* ConsoleViewController.xib in Resources */,\n\t\t\t\t1FB43AC020ADCA9E00BD5B85 /* ControllerHierarchyViewController.xib in Resources */,\n\t\t\t\t1F9DC485200F8BBE00DFC64E /* SandBoxViewController.xib in Resources */,\n\t\t\t\t1F9DC47C200F846100DFC64E /* IndexViewController.xib in Resources */,\n\t\t\t\t1F9DC46D200F83C700DFC64E /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t1F9DC46A200F83C700DFC64E /* Assets.xcassets in Resources */,\n\t\t\t\t1F9DC487200F914100DFC64E /* images.xcassets in Resources */,\n\t\t\t\t1F9DC49B200F99C300DFC64E /* IOViewController.xib in Resources */,\n\t\t\t\t1FE5C590205CC1CF000EC631 /* UserDefaultsViewController.xib in Resources */,\n\t\t\t\t1FE5C596205CC35D000EC631 /* DeviceInfoViewController.xib in Resources */,\n\t\t\t\t1F9DC496200F94FB00DFC64E /* NetworkViewController.xib in Resources */,\n\t\t\t\t1F3A946520C570C7008AE09A /* NotificationViewController.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1F9DC459200F83C700DFC64E /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F9DC49E200F9AF400DFC64E /* EchoService.m in Sources */,\n\t\t\t\t1F9DC484200F8BBE00DFC64E /* SandBoxViewController.m in Sources */,\n\t\t\t\t1F9DC470200F83C700DFC64E /* main.m in Sources */,\n\t\t\t\t1FE5C595205CC35D000EC631 /* DeviceInfoViewController.m in Sources */,\n\t\t\t\t1FE5C58F205CC1CF000EC631 /* UserDefaultsViewController.m in Sources */,\n\t\t\t\t1F3A946420C570C7008AE09A /* NotificationViewController.m in Sources */,\n\t\t\t\t1F9DC49A200F99C300DFC64E /* IOViewController.m in Sources */,\n\t\t\t\t1F46EBE120CBEA980037445F /* ConsoleViewController.m in Sources */,\n\t\t\t\t1FB43ABF20ADCA9E00BD5B85 /* ControllerHierarchyViewController.m in Sources */,\n\t\t\t\t1F9DC462200F83C700DFC64E /* AppDelegate.m in Sources */,\n\t\t\t\t1F9DC47B200F846100DFC64E /* IndexViewController.m in Sources */,\n\t\t\t\t1F9DC495200F94FB00DFC64E /* NetworkViewController.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t1F9DC46B200F83C700DFC64E /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1F9DC46C200F83C700DFC64E /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F9DC471200F83C700DFC64E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F9DC472200F83C700DFC64E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F9DC474200F83C700DFC64E /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\tEXCLUDED_ARCHS = \"\";\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = arm64;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = \"$(inherited)\";\n\t\t\t\tINFOPLIST_FILE = WoodPeckerDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.2.5;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.WoodPeckerDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F9DC475200F83C700DFC64E /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\t\"EXCLUDED_ARCHS[sdk=iphonesimulator*]\" = arm64;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = WoodPeckerDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tMARKETING_VERSION = 1.2.5;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.WoodPeckerDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F9DC458200F83C700DFC64E /* Build configuration list for PBXProject \"WoodPeckerDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F9DC471200F83C700DFC64E /* Debug */,\n\t\t\t\t1F9DC472200F83C700DFC64E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F9DC473200F83C700DFC64E /* Build configuration list for PBXNativeTarget \"WoodPeckerDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F9DC474200F83C700DFC64E /* Debug */,\n\t\t\t\t1F9DC475200F83C700DFC64E /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1F9DC455200F83C700DFC64E /* Project object */;\n}\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WoodPeckerDemo.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WoodPeckerDemo/WoodPeckerDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/20.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\nimport WoodPeckeriOS\n\n@UIApplicationMain\nclass AppDelegate: UIResponder, UIApplicationDelegate {\n\n    var window: UIWindow?\n\n\n    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {\n        window = UIWindow(frame: UIScreen.main.bounds)\n        window!.backgroundColor = UIColor.white\n        let vc = IndexViewController()\n        let nvc = UINavigationController(rootViewController: vc)\n        window!.rootViewController = nvc;\n        window!.makeKeyAndVisible()\n        return true\n\n    }\n    \n    \n    \n    \n    func caculate(A:Double,B:Double) -> Double {\n        return A + B;\n    }\n    \n    \n\n    func applicationWillResignActive(_ application: UIApplication) {\n        // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.\n        // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.\n    }\n\n    func applicationDidEnterBackground(_ application: UIApplication) {\n        // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.\n        // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.\n    }\n\n    func applicationWillEnterForeground(_ application: UIApplication) {\n        // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.\n    }\n\n    func applicationDidBecomeActive(_ application: UIApplication) {\n        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.\n    }\n\n    func applicationWillTerminate(_ application: UIApplication) {\n        // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.\n    }\n\n\n}\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"120.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"180.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"20x20\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"ipad\",\n      \"size\" : \"40x40\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"76.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"152.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"167.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"ios-marketing\",\n      \"size\" : \"1024x1024\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  },\n  \"properties\" : {\n    \"pre-rendered\" : true\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" useTraitCollections=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"EEg-y6-mb5\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"gmq-zZ-v2U\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2.1</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>NSAppTransportSecurity</key>\n\t<dict>\n\t\t<key>NSAllowsArbitraryLoads</key>\n\t\t<true/>\n\t</dict>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>armv7</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>NSLocalNetworkUsageDescription</key>\n\t<string>your description here</string>\n\t<key>NSBonjourServices</key>\n\t<array>\n\t\t<string>_adhp._tcp</string>\n\t</array>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/IO/EchoService.swift",
    "content": "//\n//  EchoService.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/21.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\nclass EchoService: ADHService {\n\n    override class func serviceName() -> String {\n        return \"adh.EchoService\";\n    }\n    \n    override class func actionList() -> ([String:String]) {\n        return [\"echo\": NSStringFromSelector(#selector(EchoService.onRequestEcho(request:)))]\n    }\n    \n    @objc func onRequestEcho(request: ADHRequest) {\n        let data = [\"response\" : \"Hi, I`m App, what`s up ?\"]\n        request.finish(withBody: data)\n    }\n    \n}\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/IO/IOViewController.swift",
    "content": "//\n//  IOViewController.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/21.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\n\n\nclass IOViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n        //register custom service\n        ADHOrganizer.shared().registerService(EchoService.classForCoder())\n    }\n    \n    @IBAction func logButtonPressed(_ sender: Any) {\n        let text = \"A channel between mac and your app, you can transfer data, call service in you app, or log message to mac client,  try log something, or you create a custom ADHService\"\n        // log to mac\n        ADHLogger.shared().logText(text)\n    }\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/IO/IOViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"IOViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" text=\"I/O\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5cJ-ca-QGy\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" image=\"tool_io\" id=\"cBi-fg-4hu\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" misplaced=\"YES\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"1OL-7N-Mid\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"167\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">A channel between mac and your app. you can log message to mac client from app or call service in you app from mac, demo implements a  custom service called \"EchoService\" to show how to  custom a service.    try log something to mac.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" misplaced=\"YES\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Se0-oa-OyA\">\n                    <rect key=\"frame\" x=\"16\" y=\"361\" width=\"283\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"log text to mac client\"/>\n                    <connections>\n                        <action selector=\"logButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"iyD-JA-B3t\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"33\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_io\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/Network/NetworkViewController.swift",
    "content": "//\n//  NetworkViewController.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/21.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\nclass NetworkViewController: UIViewController,NSURLConnectionDataDelegate,URLSessionDelegate {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n\n        // Do any additional setup after loading the view.\n    }\n\n    @IBAction func startRequest(_ sender: Any) {\n        //url connection\n        let requestURL = URL.init(string: \"https://api.github.com\")\n        let request = URLRequest.init(url: requestURL!)\n        let connection = NSURLConnection.init(request: request, delegate: self)\n        connection?.start()\n        //session request\n        self.sessionRequest()\n    }\n\n    func sessionRequest(){\n        let config  = URLSessionConfiguration.default\n        config.timeoutIntervalForRequest = 10.0\n        let mySession = URLSession.init(configuration: config, delegate: self, delegateQueue: OperationQueue.main)\n        let url = \"https://api.github.com/emojis\"\n        let requestURL = URL.init(string: url)\n        let uploadRequest = NSMutableURLRequest.init(url: requestURL!)\n        uploadRequest.httpMethod = \"POST\"\n        let formText = \"q=\\(arc4random())\"\n        let data = formText.data(using: String.Encoding.utf8)\n        let task = mySession.uploadTask(with: uploadRequest as URLRequest, from: data) { (data:Data?, response:URLResponse?, error:Error?) in\n        }\n        task.resume()\n    }\n    \n    func connection(_ connection: NSURLConnection, willSend request: URLRequest, redirectResponse response: URLResponse?) -> URLRequest? {\n        return request\n    }\n    \n    func connection(_ connection: NSURLConnection, didReceive response: URLResponse) {\n        \n    }\n    \n    func connection(_ connection: NSURLConnection, didSendBodyData bytesWritten: Int, totalBytesWritten: Int, totalBytesExpectedToWrite: Int) {\n        \n    }\n\n    func connection(_ connection: NSURLConnection, didReceive data: Data) {\n        \n    }\n    \n    func connectionDidFinishLoading(_ connection: NSURLConnection) {\n        \n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n}\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/Network/NetworkViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"NetworkViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Network\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"kAk-tp-3Is\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_network\" id=\"lyw-21-RJB\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Jeb-W6-ffi\">\n                    <rect key=\"frame\" x=\"45\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"start a request\"/>\n                    <connections>\n                        <action selector=\"startRequest:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"hjd-Lx-G75\"/>\n                    </connections>\n                </button>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"it helps you monitor any network request send from you app, supports http(s).  try start a network request.\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"ahB-A1-PSI\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"34\" y=\"54\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_network\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/SandBox/SandBoxViewController.swift",
    "content": "//\n//  SandBoxViewController.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/20.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\nclass SandboxViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n    @IBAction func addFileButtonPressed(_ sender: Any) {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        let date = Date()\n        let text = formatter.string(from: date)\n        //file name\n        formatter.dateFormat = \"HH-mm-ss\"\n        let fileName = \"\\(formatter.string(from: date)).txt\"\n        let documentPath = (NSHomeDirectory() as NSString).appendingPathComponent(\"Documents\")\n        let filePath = (documentPath as NSString).appendingPathComponent(fileName)\n        let fileURL = NSURL.fileURL(withPath: filePath)\n        \n        do {\n            try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)\n        } catch  {\n            \n        }\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n\n}\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/SandBox/SandboxViewController.temp_caseinsensitive_rename.swift",
    "content": "//\n//  SandBoxViewController.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/20.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\nclass SandboxViewController: UIViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n\n    @IBAction func addFileButtonPressed(_ sender: Any) {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        let date = Date()\n        let text = formatter.string(from: date)\n        //file name\n        formatter.dateFormat = \"HH-mm-ss\"\n        let fileName = \"\\(formatter.string(from: date)).txt\"\n        let documentPath = (NSHomeDirectory() as NSString).appendingPathComponent(\"Documents\")\n        let filePath = (documentPath as NSString).appendingPathComponent(fileName)\n        let fileURL = NSURL.fileURL(withPath: filePath)\n        \n        do {\n            try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)\n        } catch  {\n            \n        }\n    }\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n    \n\n}\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/SandBox/SandboxViewController.temp_caseinsensitive_rename.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_0\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14460.20\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"SandboxViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Sandbox\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"0g5-tf-HtM\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_sandbox\" id=\"hur-4q-QnE\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5dQ-sG-Upg\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">it makes you fetch, view, modify sandbox file (files in Document, Library, Tmp) so easiliy.    try add a file, then click mac client`s Sandbox refresh button.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Gqp-eS-p9u\">\n                    <rect key=\"frame\" x=\"45\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Add a File\"/>\n                    <connections>\n                        <action selector=\"addFileButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"yXu-xg-lTz\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"53.600000000000001\" y=\"48.125937031484263\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_sandbox\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Modules/SandBox/SandboxViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"14460.20\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"SandboxViewController\">\n            <connections>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"320\" height=\"568\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" text=\"Sandbox\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"0g5-tf-HtM\">\n                    <rect key=\"frame\" x=\"64\" y=\"90\" width=\"237\" height=\"46\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"22\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <imageView userInteractionEnabled=\"NO\" contentMode=\"scaleToFill\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" image=\"tool_sandbox\" id=\"hur-4q-QnE\">\n                    <rect key=\"frame\" x=\"16\" y=\"93\" width=\"40\" height=\"40\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                </imageView>\n                <label opaque=\"NO\" userInteractionEnabled=\"NO\" contentMode=\"left\" horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" textAlignment=\"natural\" lineBreakMode=\"tailTruncation\" numberOfLines=\"0\" baselineAdjustment=\"alignBaselines\" adjustsFontSizeToFit=\"NO\" id=\"5dQ-sG-Upg\">\n                    <rect key=\"frame\" x=\"16\" y=\"161\" width=\"288\" height=\"115\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <string key=\"text\">it makes you fetch, view, modify sandbox file (files in Document, Library, Tmp) so easiliy.    try add a file, then click mac client`s Sandbox refresh button.</string>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <nil key=\"textColor\"/>\n                    <nil key=\"highlightedColor\"/>\n                </label>\n                <button opaque=\"NO\" contentMode=\"scaleToFill\" contentHorizontalAlignment=\"center\" contentVerticalAlignment=\"center\" buttonType=\"roundedRect\" lineBreakMode=\"middleTruncation\" id=\"Gqp-eS-p9u\">\n                    <rect key=\"frame\" x=\"45\" y=\"308\" width=\"230\" height=\"50\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMaxY=\"YES\"/>\n                    <fontDescription key=\"fontDescription\" type=\"system\" pointSize=\"17\"/>\n                    <state key=\"normal\" title=\"Add a File\"/>\n                    <connections>\n                        <action selector=\"addFileButtonPressed:\" destination=\"-1\" eventType=\"touchUpInside\" id=\"yXu-xg-lTz\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"53.600000000000001\" y=\"48.125937031484263\"/>\n        </view>\n    </objects>\n    <resources>\n        <image name=\"tool_sandbox\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Structure/IndexViewController.swift",
    "content": "//\n//  IndexViewController.swift\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/20.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\nimport UIKit\n\nclass IndexViewController: UIViewController,UITableViewDelegate, UITableViewDataSource {\n\n    @IBOutlet weak var tableView: UITableView!\n    var actionList: [[String:Any]]?\n    \n    init() {\n        super.init(nibName: nil, bundle: nil)\n    }\n    \n    required init?(coder aDecoder: NSCoder) {\n        super.init(coder: aDecoder)\n    }\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        self.navigationItem.title = \"Woodpecker Demo\";\n        self.tableView.rowHeight = 60.0;\n        self.loadData()\n    }\n\n    \n    func loadData() {\n        self.actionList = [\n                [\n                \"title\" : \"Sandbox\",\n                \"action\" : #selector(IndexViewController.sandbox)\n                ],\n                [\n                \"title\" : \"Network\",\n                \"action\" : #selector(IndexViewController.network)\n                ],\n                [\n                \"title\" : \"I/O\",\n                \"action\" : #selector(IndexViewController.doIO)\n                ],\n                [\n                    \"title\" : \"More tools\",\n                    \"action\" : #selector(IndexViewController.more)\n                ]\n        ]\n    }\n    \n    @objc func sandbox(){\n        let vc = SandboxViewController()\n        self.navigationController!.pushViewController(vc, animated: true)\n    }\n    \n\n    @objc func network(){\n        let vc = NetworkViewController()\n        self.navigationController!.pushViewController(vc, animated:true)\n    }\n    \n \n    @objc func doIO(){\n        let vc = IOViewController()\n        self.navigationController!.pushViewController(vc, animated:true)\n    }\n    \n    @objc func more(){\n        let message = \"You can learn more in the Objective-C demo\";\n        let alert = UIAlertController.init(title: \"Alert\", message: message, preferredStyle: UIAlertControllerStyle.alert);\n        let confirm = UIAlertAction.init(title: \"Ok\", style: UIAlertActionStyle.default) { (action) in\n            \n        }\n        alert.addAction(confirm);\n        self.present(alert, animated: true, completion: nil);\n    }\n    \n    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {\n        let count = self.actionList!.count\n        return count\n    }\n    \n    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {\n        let kIndexCellIdentifier = \"kIndexCellIdentifier\"\n        let cell = tableView.dequeueReusableCell(withIdentifier: kIndexCellIdentifier) ?? UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: kIndexCellIdentifier)\n        var data = self.actionList![indexPath.row]\n        let title = data[\"title\"];\n        cell.textLabel?.text = (title as! String)\n        return cell;\n    }\n    \n    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {\n        var data = self.actionList![indexPath.row];\n        let action = data[\"action\"]\n        self.perform(action as? Selector)\n        tableView.deselectRow(at: indexPath, animated: false)\n    }\n\n    \n    override func didReceiveMemoryWarning() {\n        super.didReceiveMemoryWarning()\n        // Dispose of any resources that can be recreated.\n    }\n\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/Structure/IndexViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVersion=\"13771\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" colorMatched=\"YES\">\n    <device id=\"retina4_7\" orientation=\"portrait\">\n        <adaptation id=\"fullscreen\"/>\n    </device>\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"13772\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <placeholder placeholderIdentifier=\"IBFilesOwner\" id=\"-1\" userLabel=\"File's Owner\" customClass=\"IndexViewController\">\n            <connections>\n                <outlet property=\"tableView\" destination=\"Rb9-Jy-XAt\" id=\"pc5-0Z-3M8\"/>\n                <outlet property=\"view\" destination=\"i5M-Pr-FkT\" id=\"sfx-zR-JGt\"/>\n            </connections>\n        </placeholder>\n        <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"-2\" customClass=\"UIResponder\"/>\n        <view clearsContextBeforeDrawing=\"NO\" contentMode=\"scaleToFill\" id=\"i5M-Pr-FkT\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n            <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n            <subviews>\n                <tableView clipsSubviews=\"YES\" contentMode=\"scaleToFill\" misplaced=\"YES\" alwaysBounceVertical=\"YES\" style=\"plain\" separatorStyle=\"default\" rowHeight=\"-1\" estimatedRowHeight=\"-1\" sectionHeaderHeight=\"28\" sectionFooterHeight=\"28\" id=\"Rb9-Jy-XAt\">\n                    <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"375\" height=\"667\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                    <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"genericGamma22GrayColorSpace\"/>\n                    <connections>\n                        <outlet property=\"dataSource\" destination=\"-1\" id=\"y4F-dV-ndT\"/>\n                        <outlet property=\"delegate\" destination=\"-1\" id=\"chP-nD-Njd\"/>\n                    </connections>\n                </tableView>\n            </subviews>\n            <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n            <point key=\"canvasLocation\" x=\"33.5\" y=\"53.5\"/>\n        </view>\n    </objects>\n</document>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/WoodPeckerSwiftDemo-Bridging-Header.h",
    "content": "//\n//  objcBridge.h\n//  WoodPeckerSwiftDemo\n//\n//  Created by xiaogang zhang on 2018/1/21.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n\n#import <WoodPeckeriOS/WoodPeckeriOS.h>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/images.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/images.xcassets/tool_io.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_io.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/images.xcassets/tool_network.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_network.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/images.xcassets/tool_sandbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_sandbox.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo/images.xcassets/tool_webconsole.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_webconsole.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 52;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1F66F00826D25CA200ADBBBE /* WoodPeckeriOS.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F66F00626D25C7100ADBBBE /* WoodPeckeriOS.xcframework */; };\n\t\t1F66F00926D25CA200ADBBBE /* WoodPeckeriOS.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1F66F00626D25C7100ADBBBE /* WoodPeckeriOS.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t1F84227920133FD4003BFF5A /* IndexViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F84227820133FD4003BFF5A /* IndexViewController.swift */; };\n\t\t1F842296201340FE003BFF5A /* IOViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F842285201340FE003BFF5A /* IOViewController.xib */; };\n\t\t1F84229A201340FE003BFF5A /* SandboxViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F84228C201340FE003BFF5A /* SandboxViewController.xib */; };\n\t\t1F84229C201340FE003BFF5A /* NetworkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F842291201340FE003BFF5A /* NetworkViewController.xib */; };\n\t\t1F84229E20134115003BFF5A /* SandboxViewController.temp_caseinsensitive_rename.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F84229D20134115003BFF5A /* SandboxViewController.temp_caseinsensitive_rename.swift */; };\n\t\t1F8422A02013468D003BFF5A /* IndexViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F84229F2013468D003BFF5A /* IndexViewController.xib */; };\n\t\t1F8422A2201353E1003BFF5A /* images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F8422A1201353E1003BFF5A /* images.xcassets */; };\n\t\t1F8422A420143E28003BFF5A /* NetworkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8422A320143E28003BFF5A /* NetworkViewController.swift */; };\n\t\t1F8422A620144831003BFF5A /* IOViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8422A520144831003BFF5A /* IOViewController.swift */; };\n\t\t1F8422B020145079003BFF5A /* EchoService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F8422AF20145079003BFF5A /* EchoService.swift */; };\n\t\t1F90227520131F84007335EA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F90227420131F84007335EA /* AppDelegate.swift */; };\n\t\t1F90227C20131F84007335EA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F90227B20131F84007335EA /* Assets.xcassets */; };\n\t\t1F90227F20131F84007335EA /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1F90227D20131F84007335EA /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t1F90228A2013243B007335EA /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t1F66F00926D25CA200ADBBBE /* WoodPeckeriOS.xcframework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1F66F00626D25C7100ADBBBE /* WoodPeckeriOS.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WoodPeckeriOS.xcframework; path = ../WoodPeckeriOS.xcframework; sourceTree = \"<group>\"; };\n\t\t1F84227820133FD4003BFF5A /* IndexViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndexViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F842285201340FE003BFF5A /* IOViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IOViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F84228C201340FE003BFF5A /* SandboxViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SandboxViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F842291201340FE003BFF5A /* NetworkViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = NetworkViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F84229D20134115003BFF5A /* SandboxViewController.temp_caseinsensitive_rename.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxViewController.temp_caseinsensitive_rename.swift; sourceTree = \"<group>\"; };\n\t\t1F84229F2013468D003BFF5A /* IndexViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = IndexViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F8422A1201353E1003BFF5A /* images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = images.xcassets; sourceTree = \"<group>\"; };\n\t\t1F8422A320143E28003BFF5A /* NetworkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F8422A520144831003BFF5A /* IOViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IOViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F8422A820144B9C003BFF5A /* WoodPeckerSwiftDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = \"WoodPeckerSwiftDemo-Bridging-Header.h\"; sourceTree = \"<group>\"; };\n\t\t1F8422AF20145079003BFF5A /* EchoService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EchoService.swift; sourceTree = \"<group>\"; };\n\t\t1F90227120131F84007335EA /* WoodPeckerSwiftDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WoodPeckerSwiftDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F90227420131F84007335EA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t1F90227B20131F84007335EA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t1F90227E20131F84007335EA /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t1F90228020131F84007335EA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F90226E20131F84007335EA /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F66F00826D25CA200ADBBBE /* WoodPeckeriOS.xcframework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F84227520133F5B003BFF5A /* Structure */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F84227820133FD4003BFF5A /* IndexViewController.swift */,\n\t\t\t\t1F84229F2013468D003BFF5A /* IndexViewController.xib */,\n\t\t\t);\n\t\t\tpath = Structure;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F84227A201340C9003BFF5A /* Modules */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F84228A201340FE003BFF5A /* SandBox */,\n\t\t\t\t1F84228E201340FE003BFF5A /* Network */,\n\t\t\t\t1F842284201340FE003BFF5A /* IO */,\n\t\t\t);\n\t\t\tpath = Modules;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F842284201340FE003BFF5A /* IO */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F8422A520144831003BFF5A /* IOViewController.swift */,\n\t\t\t\t1F842285201340FE003BFF5A /* IOViewController.xib */,\n\t\t\t\t1F8422AF20145079003BFF5A /* EchoService.swift */,\n\t\t\t);\n\t\t\tpath = IO;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F84228A201340FE003BFF5A /* SandBox */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F84229D20134115003BFF5A /* SandboxViewController.temp_caseinsensitive_rename.swift */,\n\t\t\t\t1F84228C201340FE003BFF5A /* SandboxViewController.xib */,\n\t\t\t);\n\t\t\tpath = SandBox;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F84228E201340FE003BFF5A /* Network */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F842291201340FE003BFF5A /* NetworkViewController.xib */,\n\t\t\t\t1F8422A320143E28003BFF5A /* NetworkViewController.swift */,\n\t\t\t);\n\t\t\tpath = Network;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F90226820131F84007335EA = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F66F00626D25C7100ADBBBE /* WoodPeckeriOS.xcframework */,\n\t\t\t\t1F90227320131F84007335EA /* WoodPeckerSwiftDemo */,\n\t\t\t\t1F90227220131F84007335EA /* Products */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F90227220131F84007335EA /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F90227120131F84007335EA /* WoodPeckerSwiftDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F90227320131F84007335EA /* WoodPeckerSwiftDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F84227A201340C9003BFF5A /* Modules */,\n\t\t\t\t1F84227520133F5B003BFF5A /* Structure */,\n\t\t\t\t1F90227420131F84007335EA /* AppDelegate.swift */,\n\t\t\t\t1F90227B20131F84007335EA /* Assets.xcassets */,\n\t\t\t\t1F8422A1201353E1003BFF5A /* images.xcassets */,\n\t\t\t\t1F90227D20131F84007335EA /* LaunchScreen.storyboard */,\n\t\t\t\t1F90228020131F84007335EA /* Info.plist */,\n\t\t\t\t1F8422A820144B9C003BFF5A /* WoodPeckerSwiftDemo-Bridging-Header.h */,\n\t\t\t);\n\t\t\tpath = WoodPeckerSwiftDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F90227020131F84007335EA /* WoodPeckerSwiftDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F90228320131F84007335EA /* Build configuration list for PBXNativeTarget \"WoodPeckerSwiftDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F90226D20131F84007335EA /* Sources */,\n\t\t\t\t1F90226E20131F84007335EA /* Frameworks */,\n\t\t\t\t1F90226F20131F84007335EA /* Resources */,\n\t\t\t\t1F90228A2013243B007335EA /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WoodPeckerSwiftDemo;\n\t\t\tproductName = WoodPeckerSwiftDemo;\n\t\t\tproductReference = 1F90227120131F84007335EA /* WoodPeckerSwiftDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t1F90226920131F84007335EA /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 0920;\n\t\t\t\tLastUpgradeCheck = 0920;\n\t\t\t\tORGANIZATIONNAME = lifebetter;\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F90227020131F84007335EA = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 9.2;\n\t\t\t\t\t\tProvisioningStyle = Automatic;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1F90226C20131F84007335EA /* Build configuration list for PBXProject \"WoodPeckerSwiftDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 8.0\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 1F90226820131F84007335EA;\n\t\t\tproductRefGroup = 1F90227220131F84007335EA /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1F90227020131F84007335EA /* WoodPeckerSwiftDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F90226F20131F84007335EA /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F84229A201340FE003BFF5A /* SandboxViewController.xib in Resources */,\n\t\t\t\t1F8422A2201353E1003BFF5A /* images.xcassets in Resources */,\n\t\t\t\t1F84229C201340FE003BFF5A /* NetworkViewController.xib in Resources */,\n\t\t\t\t1F90227F20131F84007335EA /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t1F90227C20131F84007335EA /* Assets.xcassets in Resources */,\n\t\t\t\t1F842296201340FE003BFF5A /* IOViewController.xib in Resources */,\n\t\t\t\t1F8422A02013468D003BFF5A /* IndexViewController.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1F90226D20131F84007335EA /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F8422B020145079003BFF5A /* EchoService.swift in Sources */,\n\t\t\t\t1F84229E20134115003BFF5A /* SandboxViewController.temp_caseinsensitive_rename.swift in Sources */,\n\t\t\t\t1F8422A420143E28003BFF5A /* NetworkViewController.swift in Sources */,\n\t\t\t\t1F8422A620144831003BFF5A /* IOViewController.swift in Sources */,\n\t\t\t\t1F90227520131F84007335EA /* AppDelegate.swift in Sources */,\n\t\t\t\t1F84227920133FD4003BFF5A /* IndexViewController.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t1F90227D20131F84007335EA /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1F90227E20131F84007335EA /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F90228120131F84007335EA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F90228220131F84007335EA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 11.2;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F90228420131F84007335EA /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/../\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = WoodPeckerSwiftDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.WoodPeckerSwiftDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_INSTALL_OBJC_HEADER = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"${PROJECT_DIR}/WoodPeckerSwiftDemo/WoodPeckerSwiftDemo-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F90228520131F84007335EA /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/../\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = WoodPeckerSwiftDemo/Info.plist;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/Frameworks\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.WoodPeckerSwiftDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tSWIFT_INSTALL_OBJC_HEADER = YES;\n\t\t\t\tSWIFT_OBJC_BRIDGING_HEADER = \"${PROJECT_DIR}/WoodPeckerSwiftDemo/WoodPeckerSwiftDemo-Bridging-Header.h\";\n\t\t\t\tSWIFT_VERSION = 4.0;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F90226C20131F84007335EA /* Build configuration list for PBXProject \"WoodPeckerSwiftDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F90228120131F84007335EA /* Debug */,\n\t\t\t\t1F90228220131F84007335EA /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F90228320131F84007335EA /* Build configuration list for PBXNativeTarget \"WoodPeckerSwiftDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F90228420131F84007335EA /* Debug */,\n\t\t\t\t1F90228520131F84007335EA /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1F90226920131F84007335EA /* Project object */;\n}\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WoodPeckerSwiftDemo.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WoodPeckerSwiftDemo/WoodPeckerSwiftDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckeriOS-Carthage.json",
    "content": "{\n\t\"1.0.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.0.3/WoodPeckeriOS.framework.zip\",\n\t\"1.0.6\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.0.6/WoodPeckeriOS.framework.zip\",\n\t\"1.0.7\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.0.7/WoodPeckeriOS.framework.zip\",\n\t\"1.0.8\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.0.8/WoodPeckeriOS.framework.zip\",\n\t\"1.0.9\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.0.9/WoodPeckeriOS.framework.zip\",\n\t\"1.1.0\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.0/WoodPeckeriOS.framework.zip\",\n\t\"1.1.1\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.1/WoodPeckeriOS.framework.zip\",\n\t\"1.1.2\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.2/WoodPeckeriOS.framework.zip\",\n\t\"1.1.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.3/WoodPeckeriOS.framework.zip\",\n\t\"1.1.4\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.4/WoodPeckeriOS.framework.zip\",\n\t\"1.1.6\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.6/WoodPeckeriOS.framework.zip\",\n\t\"1.1.8\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.8/WoodPeckeriOS.framework.zip\",\n\t\"1.1.9\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.1.9/WoodPeckeriOS.framework.zip\",\n\t\"1.2.0\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.0/WoodPeckeriOS.framework.zip\",\n\t\"1.2.1\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.1/WoodPeckeriOS.framework.zip\",\n\t\"1.2.2\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.2/WoodPeckeriOS.framework.zip\",\n\t\"1.2.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.3/WoodPeckeriOS.framework.zip\",\n\t\"1.2.4\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.4/WoodPeckeriOS.framework.zip\",\n\t\"1.2.5\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.5/WoodPeckeriOS.framework.zip\",\n\t\"1.2.6\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.6.1/WoodPeckeriOS.framework.zip\",\n\t\"1.2.7\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.7/WoodPeckeriOS.framework.zip\",\n\t\"1.2.8\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.8/WoodPeckeriOS.framework.zip\",\n\t\"1.2.9\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.9/WoodPeckeriOS.framework.zip\",\n\t\"1.2.92\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.92/WoodPeckeriOS.xcframework.zip\",\n\t\"1.2.93\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.93/WoodPeckeriOS.xcframework.zip\",\n\t\"1.3.0\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.3.0/WoodPeckeriOS.xcframework.zip\",\n\t\"1.3.1\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.3.1/WoodPeckeriOS.xcframework.zip\",\n    \"1.3.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.3.3/WoodPeckeriOS.xcframework.zip\",\n\t\"1.4.0\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.4.0/WoodPeckeriOS.xcframework.zip\",\n\t\"1.4.1\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.4.1/WoodPeckeriOS.xcframework.zip\",\n\t\"1.4.2\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.4.2/WoodPeckeriOS.xcframework.zip\",\n    \"1.4.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.4.3/WoodPeckeriOS.xcframework.zip\"\n}\n"
  },
  {
    "path": "WoodPeckeriOS.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name                        = \"WoodPeckeriOS\"\n  s.version                     = \"1.4.3\"\n  s.summary                     = \"iOS framework for Woodpekcer Mac App\"\n  s.description                 = \"Woodpecker is a handy, powerful Mac app for iOS developer, it helps you view, modify sandbox files, monitor network, run javascript in WebView, and more...\"\n  s.homepage                    = \"http://www.woodpeck.cn\"\n  s.authors                     = { \"Woodpecker\" => \"woodperckerapp@163.com\" }\n  s.platform                    = :ios, \"11.0\"\n  s.source                      = { :git => \"https://github.com/appwoodpecker/woodpecker-ios.git\", :tag => \"#{s.version}\" }\n  s.vendored_frameworks         = \"WoodPeckeriOS.xcframework\"\n  s.license                     = { :type => 'Copyright', :file => 'LICENSE' }\n  s.user_target_xcconfig        = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }\n  s.pod_target_xcconfig \t\t= { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }\n\nend\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>AvailableLibraries</key>\n\t<array>\n\t\t<dict>\n\t\t\t<key>LibraryIdentifier</key>\n\t\t\t<string>ios-arm64_x86_64-simulator</string>\n\t\t\t<key>LibraryPath</key>\n\t\t\t<string>WoodPeckeriOS.framework</string>\n\t\t\t<key>SupportedArchitectures</key>\n\t\t\t<array>\n\t\t\t\t<string>arm64</string>\n\t\t\t\t<string>x86_64</string>\n\t\t\t</array>\n\t\t\t<key>SupportedPlatform</key>\n\t\t\t<string>ios</string>\n\t\t\t<key>SupportedPlatformVariant</key>\n\t\t\t<string>simulator</string>\n\t\t</dict>\n\t\t<dict>\n\t\t\t<key>LibraryIdentifier</key>\n\t\t\t<string>ios-arm64</string>\n\t\t\t<key>LibraryPath</key>\n\t\t\t<string>WoodPeckeriOS.framework</string>\n\t\t\t<key>SupportedArchitectures</key>\n\t\t\t<array>\n\t\t\t\t<string>arm64</string>\n\t\t\t</array>\n\t\t\t<key>SupportedPlatform</key>\n\t\t\t<string>ios</string>\n\t\t</dict>\n\t</array>\n\t<key>CFBundlePackageType</key>\n\t<string>XFWK</string>\n\t<key>XCFrameworkFormatVersion</key>\n\t<string>1.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Headers/ADHLogger.h",
    "content": "//\n//  ADHLogger.h\n//  ADHClient\n//\n//  Created by 张小刚 on 2017/12/30.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#if TARGET_OS_IPHONE\n#import <UIKit/UIKit.h>\n#endif\n\n@interface ADHLogger : NSObject\n\n+ (ADHLogger *)sharedLogger;\n- (void)logText: (NSString *)text;\n- (void)logFileWithData:(NSData *)fileData fileName:(NSString *)fileName text: (NSString *)text;\n#if TARGET_OS_IPHONE\n- (void)logText: (NSString *)text color: (UIColor *)color;\n#endif\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Headers/ADHOrganizer.h",
    "content": "//\n//  AppOrganizer.h\n//  ADHClient\n//\n//  Created by woodpecker on 2017/11/5.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n\n/**\n * parameters that specify which mac client you'd like connect to\n * learn more at http://www.woodpeck.cn/connection.html\n */\nextern NSString *const kADHHostName;\nextern NSString *const kADHHostAddress;\nextern NSString *const kADHAutoConnectEnabled;\nextern NSString *const kADHUIGestureEnabled;\n\n\n@interface ADHOrganizer : NSObject\n\n+ (ADHOrganizer *)sharedOrganizer;\n\n/**\n * register your own ADHService\n * learn more about custom service, please visit http://www.woodpeck.cn/plugin.html\n */\n- (void)registerService: (Class)serviceClazz;\n\n/**\n * show connection setup window manually, also you can use gesture too,\n * just long press with two fingers at anywhere of your app.\n */\n- (void)showUI;\n\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Headers/ADHRequest.h",
    "content": "//\n//  ADHRequest.h\n//  ADHClient\n//\n//  Created by woodpecker on 2017/11/4.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n\n@class ADHRequest;\n@class ADHSession;\n@class ADHService;\n\n@interface ADHRequest : NSObject\n\n@property (nonatomic, strong) NSString * service;\n@property (nonatomic, strong) NSString * action;\n@property (nonatomic, strong) NSDictionary * body;\n@property (nonatomic, strong) NSData * payload;\n\n\n//must call at the end of a request\n- (void)finish;\n- (void)finishWithBody: (NSDictionary *)body;\n- (void)finishWithBody: (NSDictionary *)body payload: (NSData *)payload;\n\n\n@end\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Headers/ADHService.h",
    "content": "//\n//  ADHService.h\n//  AppDevelopHelper\n//\n//  Created by woodpecker on 2017/11/4.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface ADHService : NSObject\n\n/**\n service name\n */\n+ (NSString *)serviceName;\n\n/**\n action list\n\n return @{\n    @\"actionName1\" : selector1 string,\n    @\"actionName2\" : selector2 string,\n };\n */\n+ (NSDictionary<NSString*,NSString *> *)actionList;\n\n/**\n YES: all request use one shared service instance.\n NO: each request use a new service instance.\n */\n+ (BOOL)isShared;\n\n/**\n called on service init\n */\n- (void)onServiceInit;\n\n\n@end\n\n\n@interface ADHAction: NSObject\n\n@property (nonatomic, strong) NSString * service;\n@property (nonatomic, strong) NSString * name;\n@property (nonatomic, strong) NSString * handler;\n\n+ (ADHAction *)actionWithService: (NSString *)service name: (NSString *)name handler: (NSString *)handler;\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Headers/WoodPeckeriOS.h",
    "content": "//\n//  WoodPeckeriOS.h\n//  WoodPeckeriOS\n//\n//  Created by woodpecker on 2018/1/7.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for WoodPeckeriOS.\nFOUNDATION_EXPORT double WoodPeckeriOSVersionNumber;\n\n//! Project version string for WoodPeckeriOS.\nFOUNDATION_EXPORT const unsigned char WoodPeckeriOSVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <WoodPeckeriOS/PublicHeader.h>\n\n#import <WoodPeckeriOS/ADHOrganizer.h>\n#import <WoodPeckeriOS/ADHRequest.h>\n#import <WoodPeckeriOS/ADHService.h>\n#import <WoodPeckeriOS/ADHLogger.h>\n\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/Modules/module.modulemap",
    "content": "framework module WoodPeckeriOS {\n  umbrella header \"WoodPeckeriOS.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict>\n\t\t<key>ADHConnectViewController.nib</key>\n\t\t<data>\n\t\tpqKfhkAkrBNujLZE2Ee203g6yQ8=\n\t\t</data>\n\t\t<key>ADHRemoteServiceCell.nib</key>\n\t\t<data>\n\t\t4EZm1JVZi6H8//9xa6WvF0M3POc=\n\t\t</data>\n\t\t<key>Headers/ADHLogger.h</key>\n\t\t<data>\n\t\ttr7ZIT8mFwHtfZNYOU7gcSui7M0=\n\t\t</data>\n\t\t<key>Headers/ADHOrganizer.h</key>\n\t\t<data>\n\t\txjxX+wbxgeNkXtwk1oUJrkYJQuo=\n\t\t</data>\n\t\t<key>Headers/ADHRequest.h</key>\n\t\t<data>\n\t\tImkUqO+N052g2ypMPoBtobY4s6g=\n\t\t</data>\n\t\t<key>Headers/ADHService.h</key>\n\t\t<data>\n\t\t6SENU3Ad9+OcQ0slfAzrqpYzx9s=\n\t\t</data>\n\t\t<key>Headers/WoodPeckeriOS.h</key>\n\t\t<data>\n\t\t725LXPFZloMNOizfCL/tkXqCgiQ=\n\t\t</data>\n\t\t<key>Info.plist</key>\n\t\t<data>\n\t\tEY+6I+c2ifIwpaBm8D3Lq+75SSM=\n\t\t</data>\n\t\t<key>Modules/module.modulemap</key>\n\t\t<data>\n\t\tuytDu9Ql07vN0alhWqpDzzrojIs=\n\t\t</data>\n\t\t<key>adhwebdebugger.bundle/mock.js</key>\n\t\t<data>\n\t\tYIsJN3YRR6UMoFhsBgb4JdY6tpg=\n\t\t</data>\n\t</dict>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>ADHConnectViewController.nib</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tFE5aUJkN1d13EzbgXbaQBtY3OQSGwW5XZtSSb5Clyxw=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>ADHRemoteServiceCell.nib</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tPo7DobIgRzXW62+4vL8El1TIzc5uGTIMIC2NLxTwmqk=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHLogger.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tI/Vh0EI2tIImYyjGDjEHMp4wAfoq8upkDFOD97tr7tU=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHOrganizer.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tDPmD7L8x7uJCdrgXHiQ6ztxVhsxW9ItGP/NS3pAQDpM=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHRequest.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tkxMpI4TuI/X4D1lz6txphCFANrdR4pWSFVOT/ORLEqc=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHService.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t9dlef+1QknEeYNfSnzmCv5MRj2e85DI2fA1BGlfdiDE=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/WoodPeckeriOS.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tu/8B5RVVynf7ouOSIM9W2I1djZC82Xvo0/XS3WDACzk=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Modules/module.modulemap</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t1PST2FmpFCkiPZ3i3V5g1CguJHZwfC2IwIxxLUV68nY=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>adhwebdebugger.bundle/mock.js</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tEML+wVyc32okro6yPkBnzQAG83hZugzIxJDI5qjNgNI=\n\t\t\t</data>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64/WoodPeckeriOS.framework/adhwebdebugger.bundle/mock.js",
    "content": "/**\n* mock window's console methods(log,info,warn,debug,error) and window.onerror\n*/\n\nfunction mockedMethodList () {\n    const methodList = ['log', 'info', 'warn', 'debug', 'error'];\n    return methodList;\n}\n\n//mock console methods\nfunction mockConsole() {\n  if(window.adhOriginConsole) {\n    return;\n  }\n  window.adhOriginConsole = {};\n  var methodList = mockedMethodList();\n  if(!window.console) {\n    window.console = {};\n  }else {\n    //save origin method\n    methodList.map(function (method) {\n      window.adhOriginConsole[method] = window.console[method];\n    });\n  }\n\n  methodList.map(method => {\n    window.console[method] = (...args) => {\n      printLog({\n        logType: method,\n        logs: args\n      });\n    };\n  });\n}\n\nfunction mockWindowError() {\n  if(window.adhOriginOnError) {\n     return\n  }\n  if(window.onerror) {\n      window.adhOriginOnError = window.onerror;\n  }\n  window.onerror = printError;\n}\n\nfunction restoreWindowError() {\n  window.onerror = window.adhOriginOnError;\n}\n\n/** \n * @param {String} errorMessage\n * @param {String} scriptURI\n * @param {Long}  lineNumber\n * @param {Long}  columnNumber\n * @param {Object} errorObj\n */\nfunction printError(errorMessage, scriptURI, lineNumber,columnNumber) { \n  var content = '';\n  content += 'message: ' + errorMessage + '<br/>';\n  content += 'scriptURI: ' + scriptURI + '<br/>';\n  content += 'line: ' + lineNumber + '<br/>';\n  content += 'column: ' + columnNumber;\n  console.error(content);\n}\n\n//restore console methods\nfunction restoreConsole() {\n  var methodList = mockedMethodList();\n  methodList.map(function (method) {\n    window.console[method] = window.adhOriginConsole[method];\n  });\n}\n\n//mocked log\nfunction printLog(item) {\n  var logType = item.logType;\n  let logs = item.logs || [];\n  if (!logs.length) {\n    return;\n  }\n  var content = '';\n  for (let i = 0; i < logs.length; i++) {\n      var value = logs[i];\n      if (typeof(value) == \"undefined\") {\n        result = \"undefined\";\n      }else if (!value && value!=0) {\n        result = \"null\";\n      }else if(typeof(value) == 'object'){\n        if(logs.length == 1) {\n          result = JSON.stringify(value,null,4);\n        }else {\n          result = JSON.stringify(value,null);\n        }\n      }else {\n        result = value.toString();\n      }\n      content += result;\n  }\n  var data = {};\n  data['logType'] = logType;\n  data['content'] = content;\n  // data['date'] = new Date().toString();\n  //webkit\n  if(window.webkit) {\n      if(window.webkit.messageHandlers.wkwebviewjsHandler) {\n          window.webkit.messageHandlers.wkwebviewjsHandler.postMessage(data);\n      }\n  }\n  //uiwebview\n  if(window.webviewjsHandler) {\n    webviewjsHandler(data);\n  }\n}\n\nfunction adhMock() {\n  mockConsole();\n  mockWindowError();\n}\n\nadhMock();\n\n\n\n\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Headers/ADHLogger.h",
    "content": "//\n//  ADHLogger.h\n//  ADHClient\n//\n//  Created by 张小刚 on 2017/12/30.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#if TARGET_OS_IPHONE\n#import <UIKit/UIKit.h>\n#endif\n\n@interface ADHLogger : NSObject\n\n+ (ADHLogger *)sharedLogger;\n- (void)logText: (NSString *)text;\n- (void)logFileWithData:(NSData *)fileData fileName:(NSString *)fileName text: (NSString *)text;\n#if TARGET_OS_IPHONE\n- (void)logText: (NSString *)text color: (UIColor *)color;\n#endif\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Headers/ADHOrganizer.h",
    "content": "//\n//  AppOrganizer.h\n//  ADHClient\n//\n//  Created by woodpecker on 2017/11/5.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n\n\n/**\n * parameters that specify which mac client you'd like connect to\n * learn more at http://www.woodpeck.cn/connection.html\n */\nextern NSString *const kADHHostName;\nextern NSString *const kADHHostAddress;\nextern NSString *const kADHAutoConnectEnabled;\nextern NSString *const kADHUIGestureEnabled;\n\n\n@interface ADHOrganizer : NSObject\n\n+ (ADHOrganizer *)sharedOrganizer;\n\n/**\n * register your own ADHService\n * learn more about custom service, please visit http://www.woodpeck.cn/plugin.html\n */\n- (void)registerService: (Class)serviceClazz;\n\n/**\n * show connection setup window manually, also you can use gesture too,\n * just long press with two fingers at anywhere of your app.\n */\n- (void)showUI;\n\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Headers/ADHRequest.h",
    "content": "//\n//  ADHRequest.h\n//  ADHClient\n//\n//  Created by woodpecker on 2017/11/4.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n\n@class ADHRequest;\n@class ADHSession;\n@class ADHService;\n\n@interface ADHRequest : NSObject\n\n@property (nonatomic, strong) NSString * service;\n@property (nonatomic, strong) NSString * action;\n@property (nonatomic, strong) NSDictionary * body;\n@property (nonatomic, strong) NSData * payload;\n\n\n//must call at the end of a request\n- (void)finish;\n- (void)finishWithBody: (NSDictionary *)body;\n- (void)finishWithBody: (NSDictionary *)body payload: (NSData *)payload;\n\n\n@end\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Headers/ADHService.h",
    "content": "//\n//  ADHService.h\n//  AppDevelopHelper\n//\n//  Created by woodpecker on 2017/11/4.\n//  Copyright © 2017年 lifebetter. All rights reserved.\n//\n\n#import <Foundation/Foundation.h>\n\n@interface ADHService : NSObject\n\n/**\n service name\n */\n+ (NSString *)serviceName;\n\n/**\n action list\n\n return @{\n    @\"actionName1\" : selector1 string,\n    @\"actionName2\" : selector2 string,\n };\n */\n+ (NSDictionary<NSString*,NSString *> *)actionList;\n\n/**\n YES: all request use one shared service instance.\n NO: each request use a new service instance.\n */\n+ (BOOL)isShared;\n\n/**\n called on service init\n */\n- (void)onServiceInit;\n\n\n@end\n\n\n@interface ADHAction: NSObject\n\n@property (nonatomic, strong) NSString * service;\n@property (nonatomic, strong) NSString * name;\n@property (nonatomic, strong) NSString * handler;\n\n+ (ADHAction *)actionWithService: (NSString *)service name: (NSString *)name handler: (NSString *)handler;\n\n@end\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Headers/WoodPeckeriOS.h",
    "content": "//\n//  WoodPeckeriOS.h\n//  WoodPeckeriOS\n//\n//  Created by woodpecker on 2018/1/7.\n//  Copyright © 2018年 lifebetter. All rights reserved.\n//\n\n#import <UIKit/UIKit.h>\n\n//! Project version number for WoodPeckeriOS.\nFOUNDATION_EXPORT double WoodPeckeriOSVersionNumber;\n\n//! Project version string for WoodPeckeriOS.\nFOUNDATION_EXPORT const unsigned char WoodPeckeriOSVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <WoodPeckeriOS/PublicHeader.h>\n\n#import <WoodPeckeriOS/ADHOrganizer.h>\n#import <WoodPeckeriOS/ADHRequest.h>\n#import <WoodPeckeriOS/ADHService.h>\n#import <WoodPeckeriOS/ADHLogger.h>\n\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/Modules/module.modulemap",
    "content": "framework module WoodPeckeriOS {\n  umbrella header \"WoodPeckeriOS.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict>\n\t\t<key>ADHConnectViewController.nib</key>\n\t\t<data>\n\t\tpqKfhkAkrBNujLZE2Ee203g6yQ8=\n\t\t</data>\n\t\t<key>ADHRemoteServiceCell.nib</key>\n\t\t<data>\n\t\t4EZm1JVZi6H8//9xa6WvF0M3POc=\n\t\t</data>\n\t\t<key>Headers/ADHLogger.h</key>\n\t\t<data>\n\t\ttr7ZIT8mFwHtfZNYOU7gcSui7M0=\n\t\t</data>\n\t\t<key>Headers/ADHOrganizer.h</key>\n\t\t<data>\n\t\txjxX+wbxgeNkXtwk1oUJrkYJQuo=\n\t\t</data>\n\t\t<key>Headers/ADHRequest.h</key>\n\t\t<data>\n\t\tImkUqO+N052g2ypMPoBtobY4s6g=\n\t\t</data>\n\t\t<key>Headers/ADHService.h</key>\n\t\t<data>\n\t\t6SENU3Ad9+OcQ0slfAzrqpYzx9s=\n\t\t</data>\n\t\t<key>Headers/WoodPeckeriOS.h</key>\n\t\t<data>\n\t\t725LXPFZloMNOizfCL/tkXqCgiQ=\n\t\t</data>\n\t\t<key>Info.plist</key>\n\t\t<data>\n\t\toMaB50N6kkDT7PV6DFqHL1IW2gw=\n\t\t</data>\n\t\t<key>Modules/module.modulemap</key>\n\t\t<data>\n\t\tuytDu9Ql07vN0alhWqpDzzrojIs=\n\t\t</data>\n\t\t<key>adhwebdebugger.bundle/mock.js</key>\n\t\t<data>\n\t\tYIsJN3YRR6UMoFhsBgb4JdY6tpg=\n\t\t</data>\n\t</dict>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>ADHConnectViewController.nib</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tFE5aUJkN1d13EzbgXbaQBtY3OQSGwW5XZtSSb5Clyxw=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>ADHRemoteServiceCell.nib</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tPo7DobIgRzXW62+4vL8El1TIzc5uGTIMIC2NLxTwmqk=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHLogger.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tI/Vh0EI2tIImYyjGDjEHMp4wAfoq8upkDFOD97tr7tU=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHOrganizer.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tDPmD7L8x7uJCdrgXHiQ6ztxVhsxW9ItGP/NS3pAQDpM=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHRequest.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tkxMpI4TuI/X4D1lz6txphCFANrdR4pWSFVOT/ORLEqc=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/ADHService.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t9dlef+1QknEeYNfSnzmCv5MRj2e85DI2fA1BGlfdiDE=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Headers/WoodPeckeriOS.h</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tu/8B5RVVynf7ouOSIM9W2I1djZC82Xvo0/XS3WDACzk=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Modules/module.modulemap</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t1PST2FmpFCkiPZ3i3V5g1CguJHZwfC2IwIxxLUV68nY=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>adhwebdebugger.bundle/mock.js</key>\n\t\t<dict>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tEML+wVyc32okro6yPkBnzQAG83hZugzIxJDI5qjNgNI=\n\t\t\t</data>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodPeckeriOS.xcframework/ios-arm64_x86_64-simulator/WoodPeckeriOS.framework/adhwebdebugger.bundle/mock.js",
    "content": "/**\n* mock window's console methods(log,info,warn,debug,error) and window.onerror\n*/\n\nfunction mockedMethodList () {\n    const methodList = ['log', 'info', 'warn', 'debug', 'error'];\n    return methodList;\n}\n\n//mock console methods\nfunction mockConsole() {\n  if(window.adhOriginConsole) {\n    return;\n  }\n  window.adhOriginConsole = {};\n  var methodList = mockedMethodList();\n  if(!window.console) {\n    window.console = {};\n  }else {\n    //save origin method\n    methodList.map(function (method) {\n      window.adhOriginConsole[method] = window.console[method];\n    });\n  }\n\n  methodList.map(method => {\n    window.console[method] = (...args) => {\n      printLog({\n        logType: method,\n        logs: args\n      });\n    };\n  });\n}\n\nfunction mockWindowError() {\n  if(window.adhOriginOnError) {\n     return\n  }\n  if(window.onerror) {\n      window.adhOriginOnError = window.onerror;\n  }\n  window.onerror = printError;\n}\n\nfunction restoreWindowError() {\n  window.onerror = window.adhOriginOnError;\n}\n\n/** \n * @param {String} errorMessage\n * @param {String} scriptURI\n * @param {Long}  lineNumber\n * @param {Long}  columnNumber\n * @param {Object} errorObj\n */\nfunction printError(errorMessage, scriptURI, lineNumber,columnNumber) { \n  var content = '';\n  content += 'message: ' + errorMessage + '<br/>';\n  content += 'scriptURI: ' + scriptURI + '<br/>';\n  content += 'line: ' + lineNumber + '<br/>';\n  content += 'column: ' + columnNumber;\n  console.error(content);\n}\n\n//restore console methods\nfunction restoreConsole() {\n  var methodList = mockedMethodList();\n  methodList.map(function (method) {\n    window.console[method] = window.adhOriginConsole[method];\n  });\n}\n\n//mocked log\nfunction printLog(item) {\n  var logType = item.logType;\n  let logs = item.logs || [];\n  if (!logs.length) {\n    return;\n  }\n  var content = '';\n  for (let i = 0; i < logs.length; i++) {\n      var value = logs[i];\n      if (typeof(value) == \"undefined\") {\n        result = \"undefined\";\n      }else if (!value && value!=0) {\n        result = \"null\";\n      }else if(typeof(value) == 'object'){\n        if(logs.length == 1) {\n          result = JSON.stringify(value,null,4);\n        }else {\n          result = JSON.stringify(value,null);\n        }\n      }else {\n        result = value.toString();\n      }\n      content += result;\n  }\n  var data = {};\n  data['logType'] = logType;\n  data['content'] = content;\n  // data['date'] = new Date().toString();\n  //webkit\n  if(window.webkit) {\n      if(window.webkit.messageHandlers.wkwebviewjsHandler) {\n          window.webkit.messageHandlers.wkwebviewjsHandler.postMessage(data);\n      }\n  }\n  //uiwebview\n  if(window.webviewjsHandler) {\n    webviewjsHandler(data);\n  }\n}\n\nfunction adhMock() {\n  mockConsole();\n  mockWindowError();\n}\n\nadhMock();\n\n\n\n\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/AppDelegate.swift",
    "content": "//\n//  AppDelegate.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\n@NSApplicationMain\nclass AppDelegate: NSObject, NSApplicationDelegate {\n\n    @IBOutlet weak var window: NSWindow!\n    @IBOutlet weak var tabView: NSTabView!\n    \n    var list : Array<Dictionary<String, String>>?\n    \n    func applicationDidFinishLaunching(_ aNotification: Notification) {\n        initValue()\n        loadContent()\n    }\n    \n    func initValue() {\n        self.list = [\n            [\n                \"title\" : \"Sandbox\",\n                \"page\" : \"SandboxViewController\"\n            ],\n            [\n                \"title\" : \"UserDefaults\",\n                \"page\" : \"UserDefaultsViewController\"\n            ],\n            [\n                \"title\" : \"Network\",\n                \"page\" : \"NetworkViewController\"\n            ],\n            [\n                \"title\" : \"Bundle\",\n                \"page\" : \"BundleViewController\"\n            ],\n            [\n                \"title\" : \"Notification\",\n                \"page\" : \"NotificationViewController\"\n            ],\n            [\n                \"title\" : \"Localization\",\n                \"page\" : \"LocalizationViewController\"\n            ],\n        ];\n    }\n    \n    func loadContent() {\n        var tabItems = [NSTabViewItem]()\n        for data in self.list! {\n            let title = data[\"title\"]\n            let page = data[\"page\"]\n            let nibName = page\n            let clazz = getClass(pageName:page!)\n            let vc = clazz.init(nibName: nibName, bundle: nil)\n            vc.title = title\n            let tabItem = NSTabViewItem.init(viewController: vc)\n            tabItems.append(tabItem)\n        }\n        self.tabView.tabViewItems = tabItems\n    }\n\n    func getClass(pageName: String) -> NSViewController.Type {\n        let namespace = Bundle.main.infoDictionary![\"CFBundleExecutable\"] as! String\n        let clazzName = namespace + \".\" + pageName;\n        let clazz = NSClassFromString(clazzName) as! NSViewController.Type\n        return clazz;\n    }\n    \n    func applicationWillTerminate(_ aNotification: Notification) {\n        // Insert code here to tear down your application\n    }\n    \n    func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {\n        return true\n    }\n\n\n}\n\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_bundle.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_bundle.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_localization.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_localization.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_network.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_network.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_notification.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_notification.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_sandbox.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_sandbox.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Assets.xcassets/tool_userdefaults.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"tool_userdefaults.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Base.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"GzC-gU-4Uq\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"tabView\" destination=\"BrO-Xl-71p\" id=\"M5h-uc-lcz\"/>\n                <outlet property=\"window\" destination=\"QvC-M9-y7g\" id=\"gIp-Ho-8D9\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n        <menu title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n            <items>\n                <menuItem title=\"WoodpeckerMacDemo\" id=\"1Xt-HY-uBw\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"WoodpeckerMacDemo\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                        <items>\n                            <menuItem title=\"About WoodpeckerMacDemo\" id=\"5kV-Vb-QxS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"orderFrontStandardAboutPanel:\" target=\"-1\" id=\"Exp-CZ-Vem\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                            <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                            <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                            <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                            <menuItem title=\"Hide WoodpeckerMacDemo\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                <connections>\n                                    <action selector=\"hide:\" target=\"-1\" id=\"PnN-Uc-m68\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"hideOtherApplications:\" target=\"-1\" id=\"VT4-aY-XCT\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"unhideAllApplications:\" target=\"-1\" id=\"Dhg-Le-xox\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                            <menuItem title=\"Quit WoodpeckerMacDemo\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-1\" id=\"Te7-pn-YzF\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                        <items>\n                            <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                <connections>\n                                    <action selector=\"newDocument:\" target=\"-1\" id=\"4Si-XN-c54\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                <connections>\n                                    <action selector=\"openDocument:\" target=\"-1\" id=\"bVn-NM-KNZ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                    <items>\n                                        <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"clearRecentDocuments:\" target=\"-1\" id=\"Daa-9d-B3U\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                            <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                <connections>\n                                    <action selector=\"performClose:\" target=\"-1\" id=\"HmO-Ls-i7Q\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                <connections>\n                                    <action selector=\"saveDocument:\" target=\"-1\" id=\"teZ-XB-qJY\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                <connections>\n                                    <action selector=\"saveDocumentAs:\" target=\"-1\" id=\"mDf-zr-I0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                <connections>\n                                    <action selector=\"revertDocumentToSaved:\" target=\"-1\" id=\"iJ3-Pv-kwq\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                            <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"runPageLayout:\" target=\"-1\" id=\"Din-rz-gC5\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                <connections>\n                                    <action selector=\"print:\" target=\"-1\" id=\"qaZ-4w-aoO\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                        <items>\n                            <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                <connections>\n                                    <action selector=\"undo:\" target=\"-1\" id=\"M6e-cu-g7V\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                <connections>\n                                    <action selector=\"redo:\" target=\"-1\" id=\"oIA-Rs-6OD\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                            <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                <connections>\n                                    <action selector=\"cut:\" target=\"-1\" id=\"YJe-68-I9s\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                <connections>\n                                    <action selector=\"copy:\" target=\"-1\" id=\"G1f-GL-Joy\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                <connections>\n                                    <action selector=\"paste:\" target=\"-1\" id=\"UvS-8e-Qdg\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"pasteAsPlainText:\" target=\"-1\" id=\"cEh-KX-wJQ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"delete:\" target=\"-1\" id=\"0Mk-Ml-PaM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                <connections>\n                                    <action selector=\"selectAll:\" target=\"-1\" id=\"VNm-Mi-diN\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                            <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                    <items>\n                                        <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"cD7-Qs-BN4\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"WD3-Gg-5AJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"NDo-RZ-v9R\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"HOh-sY-3ay\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"U76-nv-p5D\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                            <connections>\n                                                <action selector=\"centerSelectionInVisibleArea:\" target=\"-1\" id=\"IOG-6D-g5B\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                    <items>\n                                        <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                            <connections>\n                                                <action selector=\"showGuessPanel:\" target=\"-1\" id=\"vFj-Ks-hy3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                            <connections>\n                                                <action selector=\"checkSpelling:\" target=\"-1\" id=\"fz7-VC-reM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                        <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleContinuousSpellChecking:\" target=\"-1\" id=\"7w6-Qz-0kB\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleGrammarChecking:\" target=\"-1\" id=\"muD-Qn-j4w\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"-1\" id=\"2lM-Qi-WAP\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                    <items>\n                                        <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontSubstitutionsPanel:\" target=\"-1\" id=\"oku-mr-iSq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                        <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSmartInsertDelete:\" target=\"-1\" id=\"3IJ-Se-DZD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"-1\" id=\"ptq-xd-QOA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDashSubstitution:\" target=\"-1\" id=\"oCt-pO-9gS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticLinkDetection:\" target=\"-1\" id=\"Gip-E3-Fov\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDataDetection:\" target=\"-1\" id=\"R1I-Nq-Kbl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticTextReplacement:\" target=\"-1\" id=\"DvP-Fe-Py6\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                    <items>\n                                        <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"uppercaseWord:\" target=\"-1\" id=\"sPh-Tk-edu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"lowercaseWord:\" target=\"-1\" id=\"iUZ-b5-hil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"capitalizeWord:\" target=\"-1\" id=\"26H-TL-nsh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                    <items>\n                                        <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"startSpeaking:\" target=\"-1\" id=\"654-Ng-kyl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"stopSpeaking:\" target=\"-1\" id=\"dX8-6p-jy9\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                        <items>\n                            <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                    <items>\n                                        <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                            <connections>\n                                                <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                            <connections>\n                                                <action selector=\"underline:\" target=\"-1\" id=\"FYS-2b-JAY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                        <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                        <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardKerning:\" target=\"-1\" id=\"6dk-9l-Ckg\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffKerning:\" target=\"-1\" id=\"U8a-gz-Maa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"tightenKerning:\" target=\"-1\" id=\"hr7-Nz-8ro\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"loosenKerning:\" target=\"-1\" id=\"8i4-f9-FKE\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardLigatures:\" target=\"-1\" id=\"7uR-wd-Dx6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffLigatures:\" target=\"-1\" id=\"iX2-gA-Ilz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useAllLigatures:\" target=\"-1\" id=\"KcB-kA-TuK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"unscript:\" target=\"-1\" id=\"0vZ-95-Ywn\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"superscript:\" target=\"-1\" id=\"3qV-fo-wpU\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"subscript:\" target=\"-1\" id=\"Q6W-4W-IGz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"raiseBaseline:\" target=\"-1\" id=\"4sk-31-7Q9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowerBaseline:\" target=\"-1\" id=\"OF1-bc-KW4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                        <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                            <connections>\n                                                <action selector=\"orderFrontColorPanel:\" target=\"-1\" id=\"mSX-Xz-DV3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                        <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyFont:\" target=\"-1\" id=\"GJO-xA-L4q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteFont:\" target=\"-1\" id=\"JfD-CL-leO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                    <items>\n                                        <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                            <connections>\n                                                <action selector=\"alignLeft:\" target=\"-1\" id=\"zUv-R1-uAa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                            <connections>\n                                                <action selector=\"alignCenter:\" target=\"-1\" id=\"spX-mk-kcS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"alignJustified:\" target=\"-1\" id=\"ljL-7U-jND\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                            <connections>\n                                                <action selector=\"alignRight:\" target=\"-1\" id=\"r48-bG-YeY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                        <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                <items>\n                                                    <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"YGs-j5-SAR\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionNatural:\" target=\"-1\" id=\"qtV-5e-UBP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"Lbh-J2-qVU\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"-1\" id=\"S0X-9S-QSf\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"jFq-tB-4Kx\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"-1\" id=\"5fk-qB-AqJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                    <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"Nop-cj-93Q\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionNatural:\" target=\"-1\" id=\"lPI-Se-ZHp\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"BgM-ve-c93\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"-1\" id=\"caW-Bv-w94\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"RB4-Sm-HuC\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"-1\" id=\"EXD-6r-ZUu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                        <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleRuler:\" target=\"-1\" id=\"FOx-HJ-KwY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyRuler:\" target=\"-1\" id=\"71i-fW-3W2\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteRuler:\" target=\"-1\" id=\"cSh-wd-qM2\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                        <items>\n                            <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleToolbarShown:\" target=\"-1\" id=\"BXY-wc-z0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"runToolbarCustomizationPalette:\" target=\"-1\" id=\"pQI-g3-MTW\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                            <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleSourceList:\" target=\"-1\" id=\"iwa-gc-5KM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleFullScreen:\" target=\"-1\" id=\"dU3-MA-1Rq\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                        <items>\n                            <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                <connections>\n                                    <action selector=\"performMiniaturize:\" target=\"-1\" id=\"VwT-WD-YPe\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"performZoom:\" target=\"-1\" id=\"DIl-cC-cCs\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                            <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"arrangeInFront:\" target=\"-1\" id=\"DRN-fu-gQh\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                        <items>\n                            <menuItem title=\"WoodpeckerMacDemo Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                <connections>\n                                    <action selector=\"showHelp:\" target=\"-1\" id=\"y7X-2Q-9no\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n            </items>\n        </menu>\n        <window title=\"WoodpeckerMacDemo\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" animationBehavior=\"default\" id=\"QvC-M9-y7g\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\"/>\n            <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n            <rect key=\"contentRect\" x=\"335\" y=\"390\" width=\"540\" height=\"356\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1920\" height=\"1057\"/>\n            <view key=\"contentView\" wantsLayer=\"YES\" id=\"EiT-Mj-1SZ\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"356\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <tabView id=\"BrO-Xl-71p\">\n                        <rect key=\"frame\" x=\"-8\" y=\"-10\" width=\"556\" height=\"366\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                        <tabViewItems>\n                            <tabViewItem label=\"Tab\" identifier=\"\" id=\"Fc1-Q2-KuF\">\n                                <view key=\"view\" id=\"uIk-gt-zC7\">\n                                    <rect key=\"frame\" x=\"10\" y=\"33\" width=\"536\" height=\"320\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                </view>\n                            </tabViewItem>\n                        </tabViewItems>\n                    </tabView>\n                </subviews>\n            </view>\n            <point key=\"canvasLocation\" x=\"16\" y=\"248\"/>\n        </window>\n    </objects>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSApplicationCategoryType</key>\n\t<string>public.app-category.developer-tools</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2019 LIFE BETTER. All rights reserved.</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Bundle/BundleViewController.swift",
    "content": "//\n//  BundleViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\nclass BundleViewController: NSViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do view setup here.\n    }\n    \n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Bundle/BundleViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"BundleViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"J7Z-kM-bZ3\">\n                    <rect key=\"frame\" x=\"80\" y=\"188\" width=\"434\" height=\"51\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"Browser your app's bundle in a new way\" id=\"zgr-YD-0Rm\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"jcd-8s-TUL\">\n                    <rect key=\"frame\" x=\"20\" y=\"207\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_bundle\" id=\"YeC-Ni-H7y\"/>\n                </imageView>\n            </subviews>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_bundle\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Localization/LocalizationViewController.swift",
    "content": "//\n//  LocalizationViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\nclass LocalizationViewController: NSViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // Do view setup here.\n    }\n    \n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Localization/LocalizationViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"LocalizationViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"wlW-vp-Jn3\">\n                    <rect key=\"frame\" x=\"80\" y=\"188\" width=\"434\" height=\"59\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"List all locaized texts, find the missing text, and export them to execl files\" id=\"bOD-aV-Kh4\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"cl9-tw-Ukl\">\n                    <rect key=\"frame\" x=\"20\" y=\"207\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_localization\" id=\"dyL-6Y-5ZV\"/>\n                </imageView>\n            </subviews>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_localization\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/NetworkViewController.swift",
    "content": "//\n//  NetworkViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\nclass NetworkViewController: NSViewController,NSURLConnectionDataDelegate,URLSessionDelegate {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n    }\n    \n    @IBAction func requestButtonClicked(_ sender: Any) {\n        //url connection\n        let requestURL = URL.init(string: \"https://api.github.com\")\n        let request = URLRequest.init(url: requestURL!)\n        let connection = NSURLConnection.init(request: request, delegate: self)\n        connection?.start()\n        //session request\n        self.sessionRequest()\n    }\n    \n    func sessionRequest(){\n        let config  = URLSessionConfiguration.default\n        config.timeoutIntervalForRequest = 10.0\n        let mySession = URLSession.init(configuration: config, delegate: self, delegateQueue: OperationQueue.main)\n        let url = \"https://api.github.com/emojis\"\n        let requestURL = URL.init(string: url)\n        let uploadRequest = NSMutableURLRequest.init(url: requestURL!)\n        uploadRequest.httpMethod = \"POST\"\n        let formText = \"q=\\(arc4random())\"\n        let data = formText.data(using: String.Encoding.utf8)\n        let task = mySession.uploadTask(with: uploadRequest as URLRequest, from: data) { (data:Data?, response:URLResponse?, error:Error?) in\n        }\n        task.resume()\n    }\n    \n    func connectionDidFinishLoading(_ connection: NSURLConnection) {\n        \n    }\n    \n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/NetworkViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NetworkViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"U4L-om-MV1\">\n                    <rect key=\"frame\" x=\"80\" y=\"186\" width=\"434\" height=\"64\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"Monitor http(s) request without proxy, try start a network request\" id=\"lWG-O2-WMf\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"lPP-l8-Cqf\">\n                    <rect key=\"frame\" x=\"20\" y=\"207\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_network\" id=\"E7C-ou-MgO\"/>\n                </imageView>\n                <button verticalHuggingPriority=\"750\" id=\"dLQ-42-KUY\">\n                    <rect key=\"frame\" x=\"205\" y=\"57\" width=\"131\" height=\"32\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <buttonCell key=\"cell\" type=\"push\" title=\"Start a request\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"OJ4-xJ-M6e\">\n                        <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                    </buttonCell>\n                    <connections>\n                        <action selector=\"requestButtonClicked:\" target=\"-2\" id=\"hUL-R9-i58\"/>\n                    </connections>\n                </button>\n            </subviews>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_network\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Notification/NotificationViewController.swift",
    "content": "//\n//  NotificationViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\nimport UserNotifications\n\nclass NotificationViewController: NSViewController, UNUserNotificationCenterDelegate {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        setup()\n    }\n    \n    func setup() {\n        let notiCenter = UNUserNotificationCenter.current()\n        notiCenter.delegate = self\n        let openAction = UNNotificationAction.init(identifier: UNNotificationDefaultActionIdentifier, title: \"Okay\", options: UNNotificationActionOptions.init(rawValue: 0))\n        let category = UNNotificationCategory.init(identifier: \"category_id\", actions: [openAction], intentIdentifiers: [], options: UNNotificationCategoryOptions.init(rawValue: 0))\n        let set = Set.init([category])\n        notiCenter.setNotificationCategories(set)\n    }\n    \n    @IBAction func scheduleButtonClicked(_ sender: Any) {\n        let notiCenter = UNUserNotificationCenter.current()\n        notiCenter.requestAuthorization(options: [UNAuthorizationOptions.alert,UNAuthorizationOptions.badge,UNAuthorizationOptions.sound]) { (okay, error) in\n            if okay {\n                self.schedule()\n            }\n            if let err = error {\n                print(err)\n                let alert = NSAlert.init()\n                alert.messageText = \"request authorization failed, you can try in your own project later\"\n                alert.addButton(withTitle: \"Okay\")\n                alert.runModal();\n            }\n        }\n    }\n    \n    func schedule () {\n        let notiCenter = UNUserNotificationCenter.current()\n        let content = UNMutableNotificationContent.init()\n        content.badge = 3\n        content.body = \"I'm body\"\n        content.title = \"I'm title\"\n        content.subtitle = \"I'm subtitle\"\n        content.userInfo = [\n            \"key\" : \"value\"\n        ]\n        content.categoryIdentifier = \"category_id\";\n        //60s\n        let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 60, repeats: true)\n        let identifier = String(arc4random())\n        let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)\n        notiCenter.add(request) { (error) in\n            \n        }\n    }\n    \n    public func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {\n        \n    }\n    \n    @IBAction func removeAllButtonClicked(_ sender: Any) {\n        let notiCenter = UNUserNotificationCenter.current()\n        notiCenter.removeAllPendingNotificationRequests();\n    }\n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Notification/NotificationViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NotificationViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"f9g-RQ-S73\">\n                    <rect key=\"frame\" x=\"80\" y=\"194\" width=\"434\" height=\"52\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"View local notifications, receive coming local,remote notifications\" id=\"TpG-4R-NGQ\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"Fi3-PZ-DFf\">\n                    <rect key=\"frame\" x=\"20\" y=\"207\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_notification\" id=\"fZ3-Lb-aid\"/>\n                </imageView>\n                <button verticalHuggingPriority=\"750\" id=\"LfU-6M-O06\">\n                    <rect key=\"frame\" x=\"76\" y=\"54\" width=\"179\" height=\"32\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <buttonCell key=\"cell\" type=\"push\" title=\"Schedule a notification\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"M3b-5r-VH2\">\n                        <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                    </buttonCell>\n                    <connections>\n                        <action selector=\"scheduleButtonClicked:\" target=\"-2\" id=\"vdY-KF-sBJ\"/>\n                    </connections>\n                </button>\n                <button verticalHuggingPriority=\"750\" id=\"IGa-UQ-kbm\">\n                    <rect key=\"frame\" x=\"303\" y=\"54\" width=\"106\" height=\"32\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <buttonCell key=\"cell\" type=\"push\" title=\"Remove all\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"T5h-iR-OiD\">\n                        <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                        <string key=\"keyEquivalent\" base64-UTF8=\"YES\">\nGw\n</string>\n                    </buttonCell>\n                    <connections>\n                        <action selector=\"removeAllButtonClicked:\" target=\"-2\" id=\"R3R-hU-wX1\"/>\n                    </connections>\n                </button>\n            </subviews>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_notification\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Sandbox/SandboxViewController.swift",
    "content": "//\n//  SandboxViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\nclass SandboxViewController: NSViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n   \n    }\n    \n    @IBAction func addButtonClicked(_ sender: Any) {\n        let formatter = DateFormatter()\n        formatter.dateFormat = \"yyyy-MM-dd HH:mm:ss\"\n        let date = Date()\n        let text = formatter.string(from: date)\n        //file name\n        formatter.dateFormat = \"HH-mm-ss\"\n        let fileName = \"\\(formatter.string(from: date)).txt\"\n        let documentPath = (NSHomeDirectory() as NSString).appendingPathComponent(\"Documents\")\n        let filePath = (documentPath as NSString).appendingPathComponent(fileName)\n        let fileURL = NSURL.fileURL(withPath: filePath)\n        \n        do {\n            try text.write(to: fileURL, atomically: true, encoding: String.Encoding.utf8)\n        } catch  {\n            \n        }\n    }\n    \n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/Sandbox/SandboxViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"SandboxViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"283\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"as7-dD-sF0\">\n                    <rect key=\"frame\" x=\"80\" y=\"199\" width=\"434\" height=\"64\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"View, edit, upload, delete sandbox files in 1 seconds, sqlite database online query, edit\" id=\"jUg-4R-pre\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"nDs-UH-QtN\">\n                    <rect key=\"frame\" x=\"20\" y=\"218\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_sandbox\" id=\"kEX-zo-wH0\"/>\n                </imageView>\n                <button verticalHuggingPriority=\"750\" id=\"3xm-tR-8kk\">\n                    <rect key=\"frame\" x=\"222\" y=\"57\" width=\"97\" height=\"32\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <buttonCell key=\"cell\" type=\"push\" title=\"Add a file\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"TST-0f-ib1\">\n                        <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                    </buttonCell>\n                    <connections>\n                        <action selector=\"addButtonClicked:\" target=\"-2\" id=\"jcx-71-fTf\"/>\n                    </connections>\n                </button>\n            </subviews>\n            <point key=\"canvasLocation\" x=\"140\" y=\"161.5\"/>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_sandbox\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/UserDefaults/UserDefaultsViewController.swift",
    "content": "//\n//  UserDefaultsViewController.swift\n//  WoodpeckerMacDemo\n//\n//  Created by xiaogang zhang on 2019/6/1.\n//  Copyright © 2019 LIFE BETTER. All rights reserved.\n//\n\nimport Cocoa\n\nclass UserDefaultsViewController: NSViewController {\n\n    override func viewDidLoad() {\n        super.viewDidLoad()\n        \n    }\n    \n    @IBAction func addButtonClicked(_ sender: Any) {\n        UserDefaults.standard.set(Date.init(), forKey: \"time\")\n        UserDefaults.standard.synchronize()\n    }\n    \n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/Pages/UserDefaults/UserDefaultsViewController.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"UserDefaultsViewController\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"view\" destination=\"Hz6-mo-xeY\" id=\"0bl-1N-x8E\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customView id=\"Hz6-mo-xeY\">\n            <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"272\"/>\n            <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n            <subviews>\n                <textField horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"750\" id=\"mdS-0n-JPD\">\n                    <rect key=\"frame\" x=\"74\" y=\"212\" width=\"434\" height=\"27\"/>\n                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" flexibleMinY=\"YES\"/>\n                    <textFieldCell key=\"cell\" title=\"View, modify, remove UserDefault items online\" id=\"hzv-3h-trD\">\n                        <font key=\"font\" metaFont=\"system\" size=\"16\"/>\n                        <color key=\"textColor\" name=\"labelColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                        <color key=\"backgroundColor\" name=\"textBackgroundColor\" catalog=\"System\" colorSpace=\"catalog\"/>\n                    </textFieldCell>\n                </textField>\n                <imageView horizontalHuggingPriority=\"251\" verticalHuggingPriority=\"251\" id=\"2Rn-iu-3FV\">\n                    <rect key=\"frame\" x=\"20\" y=\"207\" width=\"48\" height=\"48\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMinY=\"YES\"/>\n                    <imageCell key=\"cell\" refusesFirstResponder=\"YES\" alignment=\"left\" imageScaling=\"proportionallyDown\" image=\"tool_userdefaults\" id=\"35b-te-Cwt\"/>\n                </imageView>\n                <button verticalHuggingPriority=\"750\" id=\"Ud9-mT-ffi\">\n                    <rect key=\"frame\" x=\"181\" y=\"57\" width=\"180\" height=\"32\"/>\n                    <autoresizingMask key=\"autoresizingMask\" flexibleMaxX=\"YES\" flexibleMaxY=\"YES\"/>\n                    <buttonCell key=\"cell\" type=\"push\" title=\"Add item named &quot;time&quot;\" bezelStyle=\"rounded\" alignment=\"center\" borderStyle=\"border\" imageScaling=\"proportionallyDown\" inset=\"2\" id=\"EUi-eR-dXo\">\n                        <behavior key=\"behavior\" pushIn=\"YES\" lightByBackground=\"YES\" lightByGray=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                    </buttonCell>\n                    <connections>\n                        <action selector=\"addButtonClicked:\" target=\"-2\" id=\"cce-9w-5Xz\"/>\n                    </connections>\n                </button>\n            </subviews>\n        </customView>\n    </objects>\n    <resources>\n        <image name=\"tool_userdefaults\" width=\"160\" height=\"160\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/WoodpeckerMacDemo.entitlements",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>com.apple.security.app-sandbox</key>\n\t<true/>\n\t<key>com.apple.security.files.user-selected.read-only</key>\n\t<true/>\n\t<key>com.apple.security.network.client</key>\n\t<true/>\n\t<key>com.apple.security.network.server</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/de.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  WoodpeckerMacDemo\n\n  Created by 张小刚 on 2019/6/1.\n  Copyright © 2019 LIFE BETTER. All rights reserved.\n*/\n\n\"hi\"=\"bonjour\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/en.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  WoodpeckerMacDemo\n\n  Created by xiaogang zhang on 2019/6/1.\n  Copyright © 2019 LIFE BETTER. All rights reserved.\n*/\n\n\"hi\"=\"Hi\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/en.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"14460.31\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"14460.31\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"GzC-gU-4Uq\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\" customModule=\"WoodpeckerMacDemo\" customModuleProvider=\"target\">\n            <connections>\n                <outlet property=\"tabView\" destination=\"BrO-Xl-71p\" id=\"M5h-uc-lcz\"/>\n                <outlet property=\"window\" destination=\"QvC-M9-y7g\" id=\"gIp-Ho-8D9\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n        <menu title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n            <items>\n                <menuItem title=\"WoodpeckerMacDemo\" id=\"1Xt-HY-uBw\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"WoodpeckerMacDemo\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                        <items>\n                            <menuItem title=\"About WoodpeckerMacDemo\" id=\"5kV-Vb-QxS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"orderFrontStandardAboutPanel:\" target=\"-1\" id=\"Exp-CZ-Vem\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                            <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                            <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                            <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                            <menuItem title=\"Hide WoodpeckerMacDemo\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                <connections>\n                                    <action selector=\"hide:\" target=\"-1\" id=\"PnN-Uc-m68\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"hideOtherApplications:\" target=\"-1\" id=\"VT4-aY-XCT\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"unhideAllApplications:\" target=\"-1\" id=\"Dhg-Le-xox\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                            <menuItem title=\"Quit WoodpeckerMacDemo\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-1\" id=\"Te7-pn-YzF\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                        <items>\n                            <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                <connections>\n                                    <action selector=\"newDocument:\" target=\"-1\" id=\"4Si-XN-c54\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                <connections>\n                                    <action selector=\"openDocument:\" target=\"-1\" id=\"bVn-NM-KNZ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                    <items>\n                                        <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"clearRecentDocuments:\" target=\"-1\" id=\"Daa-9d-B3U\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                            <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                <connections>\n                                    <action selector=\"performClose:\" target=\"-1\" id=\"HmO-Ls-i7Q\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                <connections>\n                                    <action selector=\"saveDocument:\" target=\"-1\" id=\"teZ-XB-qJY\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                <connections>\n                                    <action selector=\"saveDocumentAs:\" target=\"-1\" id=\"mDf-zr-I0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                <connections>\n                                    <action selector=\"revertDocumentToSaved:\" target=\"-1\" id=\"iJ3-Pv-kwq\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                            <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"runPageLayout:\" target=\"-1\" id=\"Din-rz-gC5\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                <connections>\n                                    <action selector=\"print:\" target=\"-1\" id=\"qaZ-4w-aoO\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                        <items>\n                            <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                <connections>\n                                    <action selector=\"undo:\" target=\"-1\" id=\"M6e-cu-g7V\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                <connections>\n                                    <action selector=\"redo:\" target=\"-1\" id=\"oIA-Rs-6OD\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                            <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                <connections>\n                                    <action selector=\"cut:\" target=\"-1\" id=\"YJe-68-I9s\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                <connections>\n                                    <action selector=\"copy:\" target=\"-1\" id=\"G1f-GL-Joy\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                <connections>\n                                    <action selector=\"paste:\" target=\"-1\" id=\"UvS-8e-Qdg\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"pasteAsPlainText:\" target=\"-1\" id=\"cEh-KX-wJQ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"delete:\" target=\"-1\" id=\"0Mk-Ml-PaM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                <connections>\n                                    <action selector=\"selectAll:\" target=\"-1\" id=\"VNm-Mi-diN\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                            <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                    <items>\n                                        <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"cD7-Qs-BN4\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"WD3-Gg-5AJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"NDo-RZ-v9R\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"HOh-sY-3ay\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"U76-nv-p5D\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                            <connections>\n                                                <action selector=\"centerSelectionInVisibleArea:\" target=\"-1\" id=\"IOG-6D-g5B\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                    <items>\n                                        <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                            <connections>\n                                                <action selector=\"showGuessPanel:\" target=\"-1\" id=\"vFj-Ks-hy3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                            <connections>\n                                                <action selector=\"checkSpelling:\" target=\"-1\" id=\"fz7-VC-reM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                        <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleContinuousSpellChecking:\" target=\"-1\" id=\"7w6-Qz-0kB\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleGrammarChecking:\" target=\"-1\" id=\"muD-Qn-j4w\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"-1\" id=\"2lM-Qi-WAP\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                    <items>\n                                        <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontSubstitutionsPanel:\" target=\"-1\" id=\"oku-mr-iSq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                        <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSmartInsertDelete:\" target=\"-1\" id=\"3IJ-Se-DZD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"-1\" id=\"ptq-xd-QOA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDashSubstitution:\" target=\"-1\" id=\"oCt-pO-9gS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticLinkDetection:\" target=\"-1\" id=\"Gip-E3-Fov\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDataDetection:\" target=\"-1\" id=\"R1I-Nq-Kbl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticTextReplacement:\" target=\"-1\" id=\"DvP-Fe-Py6\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                    <items>\n                                        <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"uppercaseWord:\" target=\"-1\" id=\"sPh-Tk-edu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"lowercaseWord:\" target=\"-1\" id=\"iUZ-b5-hil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"capitalizeWord:\" target=\"-1\" id=\"26H-TL-nsh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                    <items>\n                                        <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"startSpeaking:\" target=\"-1\" id=\"654-Ng-kyl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"stopSpeaking:\" target=\"-1\" id=\"dX8-6p-jy9\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                        <items>\n                            <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                    <items>\n                                        <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                            <connections>\n                                                <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                            <connections>\n                                                <action selector=\"underline:\" target=\"-1\" id=\"FYS-2b-JAY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                        <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                        <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardKerning:\" target=\"-1\" id=\"6dk-9l-Ckg\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffKerning:\" target=\"-1\" id=\"U8a-gz-Maa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"tightenKerning:\" target=\"-1\" id=\"hr7-Nz-8ro\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"loosenKerning:\" target=\"-1\" id=\"8i4-f9-FKE\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardLigatures:\" target=\"-1\" id=\"7uR-wd-Dx6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffLigatures:\" target=\"-1\" id=\"iX2-gA-Ilz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useAllLigatures:\" target=\"-1\" id=\"KcB-kA-TuK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"unscript:\" target=\"-1\" id=\"0vZ-95-Ywn\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"superscript:\" target=\"-1\" id=\"3qV-fo-wpU\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"subscript:\" target=\"-1\" id=\"Q6W-4W-IGz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"raiseBaseline:\" target=\"-1\" id=\"4sk-31-7Q9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowerBaseline:\" target=\"-1\" id=\"OF1-bc-KW4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                        <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                            <connections>\n                                                <action selector=\"orderFrontColorPanel:\" target=\"-1\" id=\"mSX-Xz-DV3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                        <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyFont:\" target=\"-1\" id=\"GJO-xA-L4q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteFont:\" target=\"-1\" id=\"JfD-CL-leO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                    <items>\n                                        <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                            <connections>\n                                                <action selector=\"alignLeft:\" target=\"-1\" id=\"zUv-R1-uAa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                            <connections>\n                                                <action selector=\"alignCenter:\" target=\"-1\" id=\"spX-mk-kcS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"alignJustified:\" target=\"-1\" id=\"ljL-7U-jND\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                            <connections>\n                                                <action selector=\"alignRight:\" target=\"-1\" id=\"r48-bG-YeY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                        <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                <items>\n                                                    <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"YGs-j5-SAR\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionNatural:\" target=\"-1\" id=\"qtV-5e-UBP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"Lbh-J2-qVU\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"-1\" id=\"S0X-9S-QSf\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"jFq-tB-4Kx\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"-1\" id=\"5fk-qB-AqJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                    <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"Nop-cj-93Q\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionNatural:\" target=\"-1\" id=\"lPI-Se-ZHp\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"BgM-ve-c93\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"-1\" id=\"caW-Bv-w94\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"RB4-Sm-HuC\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"-1\" id=\"EXD-6r-ZUu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                        <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleRuler:\" target=\"-1\" id=\"FOx-HJ-KwY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyRuler:\" target=\"-1\" id=\"71i-fW-3W2\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteRuler:\" target=\"-1\" id=\"cSh-wd-qM2\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                        <items>\n                            <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleToolbarShown:\" target=\"-1\" id=\"BXY-wc-z0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"runToolbarCustomizationPalette:\" target=\"-1\" id=\"pQI-g3-MTW\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                            <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleSourceList:\" target=\"-1\" id=\"iwa-gc-5KM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleFullScreen:\" target=\"-1\" id=\"dU3-MA-1Rq\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                        <items>\n                            <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                <connections>\n                                    <action selector=\"performMiniaturize:\" target=\"-1\" id=\"VwT-WD-YPe\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"performZoom:\" target=\"-1\" id=\"DIl-cC-cCs\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                            <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"arrangeInFront:\" target=\"-1\" id=\"DRN-fu-gQh\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                        <items>\n                            <menuItem title=\"WoodpeckerMacDemo Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                <connections>\n                                    <action selector=\"showHelp:\" target=\"-1\" id=\"y7X-2Q-9no\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n            </items>\n        </menu>\n        <window title=\"WoodpeckerMacDemo\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" animationBehavior=\"default\" id=\"QvC-M9-y7g\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\"/>\n            <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n            <rect key=\"contentRect\" x=\"335\" y=\"390\" width=\"540\" height=\"356\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"1920\" height=\"1057\"/>\n            <view key=\"contentView\" wantsLayer=\"YES\" id=\"EiT-Mj-1SZ\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"540\" height=\"356\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n                <subviews>\n                    <tabView id=\"BrO-Xl-71p\">\n                        <rect key=\"frame\" x=\"-8\" y=\"-10\" width=\"556\" height=\"366\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <font key=\"font\" metaFont=\"system\"/>\n                        <tabViewItems>\n                            <tabViewItem label=\"Tab\" identifier=\"\" id=\"Fc1-Q2-KuF\">\n                                <view key=\"view\" id=\"uIk-gt-zC7\">\n                                    <rect key=\"frame\" x=\"10\" y=\"33\" width=\"536\" height=\"320\"/>\n                                    <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                                </view>\n                            </tabViewItem>\n                        </tabViewItems>\n                    </tabView>\n                </subviews>\n            </view>\n            <point key=\"canvasLocation\" x=\"16\" y=\"248\"/>\n        </window>\n    </objects>\n</document>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/fr.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  WoodpeckerMacDemo\n\n  Created by xiaogang zhang on 2019/6/1.\n  Copyright © 2019 LIFE BETTER. All rights reserved.\n*/\n\n\"hi\"=\"Bonjour\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/fr.lproj/MainMenu.strings",
    "content": "\n/* Class = \"NSMenuItem\"; title = \"Customize Toolbar…\"; ObjectID = \"1UK-8n-QPP\"; */\n\"1UK-8n-QPP.title\" = \"Customize Toolbar…\";\n\n/* Class = \"NSMenuItem\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"1Xt-HY-uBw\"; */\n\"1Xt-HY-uBw.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenu\"; title = \"Find\"; ObjectID = \"1b7-l0-nxx\"; */\n\"1b7-l0-nxx.title\" = \"Find\";\n\n/* Class = \"NSMenuItem\"; title = \"Lower\"; ObjectID = \"1tx-W0-xDw\"; */\n\"1tx-W0-xDw.title\" = \"Lower\";\n\n/* Class = \"NSMenuItem\"; title = \"Raise\"; ObjectID = \"2h7-ER-AoG\"; */\n\"2h7-ER-AoG.title\" = \"Raise\";\n\n/* Class = \"NSMenuItem\"; title = \"Transformations\"; ObjectID = \"2oI-Rn-ZJC\"; */\n\"2oI-Rn-ZJC.title\" = \"Transformations\";\n\n/* Class = \"NSMenu\"; title = \"Spelling\"; ObjectID = \"3IN-sU-3Bg\"; */\n\"3IN-sU-3Bg.title\" = \"Spelling\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"3Om-Ey-2VK\"; */\n\"3Om-Ey-2VK.title\" = \"Use Default\";\n\n/* Class = \"NSMenu\"; title = \"Speech\"; ObjectID = \"3rS-ZA-NoH\"; */\n\"3rS-ZA-NoH.title\" = \"Speech\";\n\n/* Class = \"NSMenuItem\"; title = \"Tighten\"; ObjectID = \"46P-cB-AYj\"; */\n\"46P-cB-AYj.title\" = \"Tighten\";\n\n/* Class = \"NSMenuItem\"; title = \"Find\"; ObjectID = \"4EN-yA-p0u\"; */\n\"4EN-yA-p0u.title\" = \"Find\";\n\n/* Class = \"NSMenuItem\"; title = \"Enter Full Screen\"; ObjectID = \"4J7-dP-txa\"; */\n\"4J7-dP-txa.title\" = \"Enter Full Screen\";\n\n/* Class = \"NSMenuItem\"; title = \"Quit WoodpeckerMacDemo\"; ObjectID = \"4sb-4s-VLi\"; */\n\"4sb-4s-VLi.title\" = \"Quit WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Edit\"; ObjectID = \"5QF-Oa-p0T\"; */\n\"5QF-Oa-p0T.title\" = \"Edit\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy Style\"; ObjectID = \"5Vv-lz-BsD\"; */\n\"5Vv-lz-BsD.title\" = \"Copy Style\";\n\n/* Class = \"NSMenuItem\"; title = \"About WoodpeckerMacDemo\"; ObjectID = \"5kV-Vb-QxS\"; */\n\"5kV-Vb-QxS.title\" = \"About WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Redo\"; ObjectID = \"6dh-zS-Vam\"; */\n\"6dh-zS-Vam.title\" = \"Redo\";\n\n/* Class = \"NSMenuItem\"; title = \"Correct Spelling Automatically\"; ObjectID = \"78Y-hA-62v\"; */\n\"78Y-hA-62v.title\" = \"Correct Spelling Automatically\";\n\n/* Class = \"NSMenu\"; title = \"Writing Direction\"; ObjectID = \"8mr-sm-Yjd\"; */\n\"8mr-sm-Yjd.title\" = \"Writing Direction\";\n\n/* Class = \"NSMenuItem\"; title = \"Substitutions\"; ObjectID = \"9ic-FL-obx\"; */\n\"9ic-FL-obx.title\" = \"Substitutions\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Copy/Paste\"; ObjectID = \"9yt-4B-nSM\"; */\n\"9yt-4B-nSM.title\" = \"Smart Copy/Paste\";\n\n/* Class = \"NSMenu\"; title = \"Main Menu\"; ObjectID = \"AYu-sK-qS6\"; */\n\"AYu-sK-qS6.title\" = \"Main Menu\";\n\n/* Class = \"NSMenuItem\"; title = \"Preferences…\"; ObjectID = \"BOF-NM-1cW\"; */\n\"BOF-NM-1cW.title\" = \"Preferences…\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"BgM-ve-c93\"; */\n\"BgM-ve-c93.title\" = \"\\tLeft to Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Save As…\"; ObjectID = \"Bw7-FT-i3A\"; */\n\"Bw7-FT-i3A.title\" = \"Save As…\";\n\n/* Class = \"NSMenuItem\"; title = \"Close\"; ObjectID = \"DVo-aG-piG\"; */\n\"DVo-aG-piG.title\" = \"Close\";\n\n/* Class = \"NSMenuItem\"; title = \"Spelling and Grammar\"; ObjectID = \"Dv1-io-Yv7\"; */\n\"Dv1-io-Yv7.title\" = \"Spelling and Grammar\";\n\n/* Class = \"NSMenu\"; title = \"Help\"; ObjectID = \"F2S-fz-NVQ\"; */\n\"F2S-fz-NVQ.title\" = \"Help\";\n\n/* Class = \"NSMenuItem\"; title = \"WoodpeckerMacDemo Help\"; ObjectID = \"FKE-Sm-Kum\"; */\n\"FKE-Sm-Kum.title\" = \"WoodpeckerMacDemo Help\";\n\n/* Class = \"NSMenuItem\"; title = \"Text\"; ObjectID = \"Fal-I4-PZk\"; */\n\"Fal-I4-PZk.title\" = \"Text\";\n\n/* Class = \"NSTabViewItem\"; label = \"Tab\"; ObjectID = \"Fc1-Q2-KuF\"; */\n\"Fc1-Q2-KuF.label\" = \"Tab\";\n\n/* Class = \"NSMenu\"; title = \"Substitutions\"; ObjectID = \"FeM-D8-WVr\"; */\n\"FeM-D8-WVr.title\" = \"Substitutions\";\n\n/* Class = \"NSMenuItem\"; title = \"Bold\"; ObjectID = \"GB9-OM-e27\"; */\n\"GB9-OM-e27.title\" = \"Bold\";\n\n/* Class = \"NSMenu\"; title = \"Format\"; ObjectID = \"GEO-Iw-cKr\"; */\n\"GEO-Iw-cKr.title\" = \"Format\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"GUa-eO-cwY\"; */\n\"GUa-eO-cwY.title\" = \"Use Default\";\n\n/* Class = \"NSMenuItem\"; title = \"Font\"; ObjectID = \"Gi5-1S-RQB\"; */\n\"Gi5-1S-RQB.title\" = \"Font\";\n\n/* Class = \"NSMenuItem\"; title = \"Writing Direction\"; ObjectID = \"H1b-Si-o9J\"; */\n\"H1b-Si-o9J.title\" = \"Writing Direction\";\n\n/* Class = \"NSMenuItem\"; title = \"View\"; ObjectID = \"H8h-7b-M4v\"; */\n\"H8h-7b-M4v.title\" = \"View\";\n\n/* Class = \"NSMenuItem\"; title = \"Text Replacement\"; ObjectID = \"HFQ-gK-NFA\"; */\n\"HFQ-gK-NFA.title\" = \"Text Replacement\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Spelling and Grammar\"; ObjectID = \"HFo-cy-zxI\"; */\n\"HFo-cy-zxI.title\" = \"Show Spelling and Grammar\";\n\n/* Class = \"NSMenu\"; title = \"View\"; ObjectID = \"HyV-fh-RgO\"; */\n\"HyV-fh-RgO.title\" = \"View\";\n\n/* Class = \"NSMenuItem\"; title = \"Subscript\"; ObjectID = \"I0S-gh-46l\"; */\n\"I0S-gh-46l.title\" = \"Subscript\";\n\n/* Class = \"NSMenuItem\"; title = \"Open…\"; ObjectID = \"IAo-SY-fd9\"; */\n\"IAo-SY-fd9.title\" = \"Open…\";\n\n/* Class = \"NSMenuItem\"; title = \"Justify\"; ObjectID = \"J5U-5w-g23\"; */\n\"J5U-5w-g23.title\" = \"Justify\";\n\n/* Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"J7y-lM-qPV\"; */\n\"J7y-lM-qPV.title\" = \"Use None\";\n\n/* Class = \"NSMenuItem\"; title = \"Revert to Saved\"; ObjectID = \"KaW-ft-85H\"; */\n\"KaW-ft-85H.title\" = \"Revert to Saved\";\n\n/* Class = \"NSMenuItem\"; title = \"Show All\"; ObjectID = \"Kd2-mp-pUS\"; */\n\"Kd2-mp-pUS.title\" = \"Show All\";\n\n/* Class = \"NSMenuItem\"; title = \"Bring All to Front\"; ObjectID = \"LE2-aR-0XJ\"; */\n\"LE2-aR-0XJ.title\" = \"Bring All to Front\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste Ruler\"; ObjectID = \"LVM-kO-fVI\"; */\n\"LVM-kO-fVI.title\" = \"Paste Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"Lbh-J2-qVU\"; */\n\"Lbh-J2-qVU.title\" = \"\\tLeft to Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy Ruler\"; ObjectID = \"MkV-Pr-PK5\"; */\n\"MkV-Pr-PK5.title\" = \"Copy Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"Services\"; ObjectID = \"NMo-om-nkz\"; */\n\"NMo-om-nkz.title\" = \"Services\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"Nop-cj-93Q\"; */\n\"Nop-cj-93Q.title\" = \"\\tDefault\";\n\n/* Class = \"NSMenuItem\"; title = \"Minimize\"; ObjectID = \"OY7-WF-poV\"; */\n\"OY7-WF-poV.title\" = \"Minimize\";\n\n/* Class = \"NSMenuItem\"; title = \"Baseline\"; ObjectID = \"OaQ-X3-Vso\"; */\n\"OaQ-X3-Vso.title\" = \"Baseline\";\n\n/* Class = \"NSMenuItem\"; title = \"Hide WoodpeckerMacDemo\"; ObjectID = \"Olw-nP-bQN\"; */\n\"Olw-nP-bQN.title\" = \"Hide WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Find Previous\"; ObjectID = \"OwM-mh-QMV\"; */\n\"OwM-mh-QMV.title\" = \"Find Previous\";\n\n/* Class = \"NSMenuItem\"; title = \"Stop Speaking\"; ObjectID = \"Oyz-dy-DGm\"; */\n\"Oyz-dy-DGm.title\" = \"Stop Speaking\";\n\n/* Class = \"NSMenuItem\"; title = \"Bigger\"; ObjectID = \"Ptp-SP-VEL\"; */\n\"Ptp-SP-VEL.title\" = \"Bigger\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Fonts\"; ObjectID = \"Q5e-8K-NDq\"; */\n\"Q5e-8K-NDq.title\" = \"Show Fonts\";\n\n/* Class = \"NSWindow\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"QvC-M9-y7g\"; */\n\"QvC-M9-y7g.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Zoom\"; ObjectID = \"R4o-n2-Eq4\"; */\n\"R4o-n2-Eq4.title\" = \"Zoom\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"RB4-Sm-HuC\"; */\n\"RB4-Sm-HuC.title\" = \"\\tRight to Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Superscript\"; ObjectID = \"Rqc-34-cIF\"; */\n\"Rqc-34-cIF.title\" = \"Superscript\";\n\n/* Class = \"NSMenuItem\"; title = \"Select All\"; ObjectID = \"Ruw-6m-B2m\"; */\n\"Ruw-6m-B2m.title\" = \"Select All\";\n\n/* Class = \"NSMenuItem\"; title = \"Jump to Selection\"; ObjectID = \"S0p-oC-mLd\"; */\n\"S0p-oC-mLd.title\" = \"Jump to Selection\";\n\n/* Class = \"NSMenu\"; title = \"Window\"; ObjectID = \"Td7-aD-5lo\"; */\n\"Td7-aD-5lo.title\" = \"Window\";\n\n/* Class = \"NSMenuItem\"; title = \"Capitalize\"; ObjectID = \"UEZ-Bs-lqG\"; */\n\"UEZ-Bs-lqG.title\" = \"Capitalize\";\n\n/* Class = \"NSMenuItem\"; title = \"Center\"; ObjectID = \"VIY-Ag-zcb\"; */\n\"VIY-Ag-zcb.title\" = \"Center\";\n\n/* Class = \"NSMenuItem\"; title = \"Hide Others\"; ObjectID = \"Vdr-fp-XzO\"; */\n\"Vdr-fp-XzO.title\" = \"Hide Others\";\n\n/* Class = \"NSMenuItem\"; title = \"Italic\"; ObjectID = \"Vjx-xi-njq\"; */\n\"Vjx-xi-njq.title\" = \"Italic\";\n\n/* Class = \"NSMenu\"; title = \"Edit\"; ObjectID = \"W48-6f-4Dl\"; */\n\"W48-6f-4Dl.title\" = \"Edit\";\n\n/* Class = \"NSMenuItem\"; title = \"Underline\"; ObjectID = \"WRG-CD-K1S\"; */\n\"WRG-CD-K1S.title\" = \"Underline\";\n\n/* Class = \"NSMenuItem\"; title = \"New\"; ObjectID = \"Was-JA-tGl\"; */\n\"Was-JA-tGl.title\" = \"New\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste and Match Style\"; ObjectID = \"WeT-3V-zwk\"; */\n\"WeT-3V-zwk.title\" = \"Paste and Match Style\";\n\n/* Class = \"NSMenuItem\"; title = \"Find…\"; ObjectID = \"Xz5-n4-O0W\"; */\n\"Xz5-n4-O0W.title\" = \"Find…\";\n\n/* Class = \"NSMenuItem\"; title = \"Find and Replace…\"; ObjectID = \"YEy-JH-Tfz\"; */\n\"YEy-JH-Tfz.title\" = \"Find and Replace…\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"YGs-j5-SAR\"; */\n\"YGs-j5-SAR.title\" = \"\\tDefault\";\n\n/* Class = \"NSMenuItem\"; title = \"Start Speaking\"; ObjectID = \"Ynk-f8-cLZ\"; */\n\"Ynk-f8-cLZ.title\" = \"Start Speaking\";\n\n/* Class = \"NSMenuItem\"; title = \"Align Left\"; ObjectID = \"ZM1-6Q-yy1\"; */\n\"ZM1-6Q-yy1.title\" = \"Align Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Paragraph\"; ObjectID = \"ZvO-Gk-QUH\"; */\n\"ZvO-Gk-QUH.title\" = \"Paragraph\";\n\n/* Class = \"NSMenuItem\"; title = \"Print…\"; ObjectID = \"aTl-1u-JFS\"; */\n\"aTl-1u-JFS.title\" = \"Print…\";\n\n/* Class = \"NSMenuItem\"; title = \"Window\"; ObjectID = \"aUF-d1-5bR\"; */\n\"aUF-d1-5bR.title\" = \"Window\";\n\n/* Class = \"NSMenu\"; title = \"Font\"; ObjectID = \"aXa-aM-Jaq\"; */\n\"aXa-aM-Jaq.title\" = \"Font\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"agt-UL-0e3\"; */\n\"agt-UL-0e3.title\" = \"Use Default\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Colors\"; ObjectID = \"bgn-CT-cEk\"; */\n\"bgn-CT-cEk.title\" = \"Show Colors\";\n\n/* Class = \"NSMenu\"; title = \"File\"; ObjectID = \"bib-Uj-vzu\"; */\n\"bib-Uj-vzu.title\" = \"File\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Selection for Find\"; ObjectID = \"buJ-ug-pKt\"; */\n\"buJ-ug-pKt.title\" = \"Use Selection for Find\";\n\n/* Class = \"NSMenu\"; title = \"Transformations\"; ObjectID = \"c8a-y6-VQd\"; */\n\"c8a-y6-VQd.title\" = \"Transformations\";\n\n/* Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"cDB-IK-hbR\"; */\n\"cDB-IK-hbR.title\" = \"Use None\";\n\n/* Class = \"NSMenuItem\"; title = \"Selection\"; ObjectID = \"cqv-fj-IhA\"; */\n\"cqv-fj-IhA.title\" = \"Selection\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Links\"; ObjectID = \"cwL-P1-jid\"; */\n\"cwL-P1-jid.title\" = \"Smart Links\";\n\n/* Class = \"NSMenuItem\"; title = \"Make Lower Case\"; ObjectID = \"d9M-CD-aMd\"; */\n\"d9M-CD-aMd.title\" = \"Make Lower Case\";\n\n/* Class = \"NSMenu\"; title = \"Text\"; ObjectID = \"d9c-me-L2H\"; */\n\"d9c-me-L2H.title\" = \"Text\";\n\n/* Class = \"NSMenuItem\"; title = \"File\"; ObjectID = \"dMs-cI-mzQ\"; */\n\"dMs-cI-mzQ.title\" = \"File\";\n\n/* Class = \"NSMenuItem\"; title = \"Undo\"; ObjectID = \"dRJ-4n-Yzg\"; */\n\"dRJ-4n-Yzg.title\" = \"Undo\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste\"; ObjectID = \"gVA-U4-sdL\"; */\n\"gVA-U4-sdL.title\" = \"Paste\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Quotes\"; ObjectID = \"hQb-2v-fYv\"; */\n\"hQb-2v-fYv.title\" = \"Smart Quotes\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Document Now\"; ObjectID = \"hz2-CU-CR7\"; */\n\"hz2-CU-CR7.title\" = \"Check Document Now\";\n\n/* Class = \"NSMenu\"; title = \"Services\"; ObjectID = \"hz9-B4-Xy5\"; */\n\"hz9-B4-Xy5.title\" = \"Services\";\n\n/* Class = \"NSMenuItem\"; title = \"Smaller\"; ObjectID = \"i1d-Er-qST\"; */\n\"i1d-Er-qST.title\" = \"Smaller\";\n\n/* Class = \"NSMenu\"; title = \"Baseline\"; ObjectID = \"ijk-EB-dga\"; */\n\"ijk-EB-dga.title\" = \"Baseline\";\n\n/* Class = \"NSMenuItem\"; title = \"Kern\"; ObjectID = \"jBQ-r6-VK2\"; */\n\"jBQ-r6-VK2.title\" = \"Kern\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"jFq-tB-4Kx\"; */\n\"jFq-tB-4Kx.title\" = \"\\tRight to Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Format\"; ObjectID = \"jxT-CU-nIS\"; */\n\"jxT-CU-nIS.title\" = \"Format\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Sidebar\"; ObjectID = \"kIP-vf-haE\"; */\n\"kIP-vf-haE.title\" = \"Show Sidebar\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Grammar With Spelling\"; ObjectID = \"mK6-2p-4JG\"; */\n\"mK6-2p-4JG.title\" = \"Check Grammar With Spelling\";\n\n/* Class = \"NSMenuItem\"; title = \"Ligatures\"; ObjectID = \"o6e-r0-MWq\"; */\n\"o6e-r0-MWq.title\" = \"Ligatures\";\n\n/* Class = \"NSMenu\"; title = \"Open Recent\"; ObjectID = \"oas-Oc-fiZ\"; */\n\"oas-Oc-fiZ.title\" = \"Open Recent\";\n\n/* Class = \"NSMenuItem\"; title = \"Loosen\"; ObjectID = \"ogc-rX-tC1\"; */\n\"ogc-rX-tC1.title\" = \"Loosen\";\n\n/* Class = \"NSMenuItem\"; title = \"Delete\"; ObjectID = \"pa3-QI-u2k\"; */\n\"pa3-QI-u2k.title\" = \"Delete\";\n\n/* Class = \"NSMenuItem\"; title = \"Save…\"; ObjectID = \"pxx-59-PXV\"; */\n\"pxx-59-PXV.title\" = \"Save…\";\n\n/* Class = \"NSMenuItem\"; title = \"Find Next\"; ObjectID = \"q09-fT-Sye\"; */\n\"q09-fT-Sye.title\" = \"Find Next\";\n\n/* Class = \"NSMenuItem\"; title = \"Page Setup…\"; ObjectID = \"qIS-W8-SiK\"; */\n\"qIS-W8-SiK.title\" = \"Page Setup…\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Spelling While Typing\"; ObjectID = \"rbD-Rh-wIN\"; */\n\"rbD-Rh-wIN.title\" = \"Check Spelling While Typing\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Dashes\"; ObjectID = \"rgM-f4-ycn\"; */\n\"rgM-f4-ycn.title\" = \"Smart Dashes\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Toolbar\"; ObjectID = \"snW-S8-Cw5\"; */\n\"snW-S8-Cw5.title\" = \"Show Toolbar\";\n\n/* Class = \"NSMenuItem\"; title = \"Data Detectors\"; ObjectID = \"tRr-pd-1PS\"; */\n\"tRr-pd-1PS.title\" = \"Data Detectors\";\n\n/* Class = \"NSMenuItem\"; title = \"Open Recent\"; ObjectID = \"tXI-mr-wws\"; */\n\"tXI-mr-wws.title\" = \"Open Recent\";\n\n/* Class = \"NSMenu\"; title = \"Kern\"; ObjectID = \"tlD-Oa-oAM\"; */\n\"tlD-Oa-oAM.title\" = \"Kern\";\n\n/* Class = \"NSMenu\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"uQy-DD-JDr\"; */\n\"uQy-DD-JDr.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Cut\"; ObjectID = \"uRl-iY-unG\"; */\n\"uRl-iY-unG.title\" = \"Cut\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste Style\"; ObjectID = \"vKC-jM-MkH\"; */\n\"vKC-jM-MkH.title\" = \"Paste Style\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Ruler\"; ObjectID = \"vLm-3I-IUL\"; */\n\"vLm-3I-IUL.title\" = \"Show Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"Clear Menu\"; ObjectID = \"vNY-rz-j42\"; */\n\"vNY-rz-j42.title\" = \"Clear Menu\";\n\n/* Class = \"NSMenuItem\"; title = \"Make Upper Case\"; ObjectID = \"vmV-6d-7jI\"; */\n\"vmV-6d-7jI.title\" = \"Make Upper Case\";\n\n/* Class = \"NSMenu\"; title = \"Ligatures\"; ObjectID = \"w0m-vy-SC9\"; */\n\"w0m-vy-SC9.title\" = \"Ligatures\";\n\n/* Class = \"NSMenuItem\"; title = \"Align Right\"; ObjectID = \"wb2-vD-lq4\"; */\n\"wb2-vD-lq4.title\" = \"Align Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Help\"; ObjectID = \"wpr-3q-Mcd\"; */\n\"wpr-3q-Mcd.title\" = \"Help\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy\"; ObjectID = \"x3v-GG-iWU\"; */\n\"x3v-GG-iWU.title\" = \"Copy\";\n\n/* Class = \"NSMenuItem\"; title = \"Use All\"; ObjectID = \"xQD-1f-W4t\"; */\n\"xQD-1f-W4t.title\" = \"Use All\";\n\n/* Class = \"NSMenuItem\"; title = \"Speech\"; ObjectID = \"xrE-MZ-jX0\"; */\n\"xrE-MZ-jX0.title\" = \"Speech\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Substitutions\"; ObjectID = \"z6F-FW-3nz\"; */\n\"z6F-FW-3nz.title\" = \"Show Substitutions\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/zh-Hans.lproj/Localizable.strings",
    "content": "/* \n  Localizable.strings\n  WoodpeckerMacDemo\n\n  Created by xiaogang zhang on 2019/6/1.\n  Copyright © 2019 LIFE BETTER. All rights reserved.\n*/\n\n\"hi\"=\"你好\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo/zh-Hans.lproj/MainMenu.strings",
    "content": "\n/* Class = \"NSMenuItem\"; title = \"Customize Toolbar…\"; ObjectID = \"1UK-8n-QPP\"; */\n\"1UK-8n-QPP.title\" = \"Customize Toolbar…\";\n\n/* Class = \"NSMenuItem\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"1Xt-HY-uBw\"; */\n\"1Xt-HY-uBw.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenu\"; title = \"Find\"; ObjectID = \"1b7-l0-nxx\"; */\n\"1b7-l0-nxx.title\" = \"Find\";\n\n/* Class = \"NSMenuItem\"; title = \"Lower\"; ObjectID = \"1tx-W0-xDw\"; */\n\"1tx-W0-xDw.title\" = \"Lower\";\n\n/* Class = \"NSMenuItem\"; title = \"Raise\"; ObjectID = \"2h7-ER-AoG\"; */\n\"2h7-ER-AoG.title\" = \"Raise\";\n\n/* Class = \"NSMenuItem\"; title = \"Transformations\"; ObjectID = \"2oI-Rn-ZJC\"; */\n\"2oI-Rn-ZJC.title\" = \"Transformations\";\n\n/* Class = \"NSMenu\"; title = \"Spelling\"; ObjectID = \"3IN-sU-3Bg\"; */\n\"3IN-sU-3Bg.title\" = \"Spelling\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"3Om-Ey-2VK\"; */\n\"3Om-Ey-2VK.title\" = \"Use Default\";\n\n/* Class = \"NSMenu\"; title = \"Speech\"; ObjectID = \"3rS-ZA-NoH\"; */\n\"3rS-ZA-NoH.title\" = \"Speech\";\n\n/* Class = \"NSMenuItem\"; title = \"Tighten\"; ObjectID = \"46P-cB-AYj\"; */\n\"46P-cB-AYj.title\" = \"Tighten\";\n\n/* Class = \"NSMenuItem\"; title = \"Find\"; ObjectID = \"4EN-yA-p0u\"; */\n\"4EN-yA-p0u.title\" = \"Find\";\n\n/* Class = \"NSMenuItem\"; title = \"Enter Full Screen\"; ObjectID = \"4J7-dP-txa\"; */\n\"4J7-dP-txa.title\" = \"Enter Full Screen\";\n\n/* Class = \"NSMenuItem\"; title = \"Quit WoodpeckerMacDemo\"; ObjectID = \"4sb-4s-VLi\"; */\n\"4sb-4s-VLi.title\" = \"Quit WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Edit\"; ObjectID = \"5QF-Oa-p0T\"; */\n\"5QF-Oa-p0T.title\" = \"Edit\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy Style\"; ObjectID = \"5Vv-lz-BsD\"; */\n\"5Vv-lz-BsD.title\" = \"Copy Style\";\n\n/* Class = \"NSMenuItem\"; title = \"About WoodpeckerMacDemo\"; ObjectID = \"5kV-Vb-QxS\"; */\n\"5kV-Vb-QxS.title\" = \"About WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Redo\"; ObjectID = \"6dh-zS-Vam\"; */\n\"6dh-zS-Vam.title\" = \"Redo\";\n\n/* Class = \"NSMenuItem\"; title = \"Correct Spelling Automatically\"; ObjectID = \"78Y-hA-62v\"; */\n\"78Y-hA-62v.title\" = \"Correct Spelling Automatically\";\n\n/* Class = \"NSMenu\"; title = \"Writing Direction\"; ObjectID = \"8mr-sm-Yjd\"; */\n\"8mr-sm-Yjd.title\" = \"Writing Direction\";\n\n/* Class = \"NSMenuItem\"; title = \"Substitutions\"; ObjectID = \"9ic-FL-obx\"; */\n\"9ic-FL-obx.title\" = \"Substitutions\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Copy/Paste\"; ObjectID = \"9yt-4B-nSM\"; */\n\"9yt-4B-nSM.title\" = \"Smart Copy/Paste\";\n\n/* Class = \"NSMenu\"; title = \"Main Menu\"; ObjectID = \"AYu-sK-qS6\"; */\n\"AYu-sK-qS6.title\" = \"Main Menu\";\n\n/* Class = \"NSMenuItem\"; title = \"Preferences…\"; ObjectID = \"BOF-NM-1cW\"; */\n\"BOF-NM-1cW.title\" = \"Preferences…\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"BgM-ve-c93\"; */\n\"BgM-ve-c93.title\" = \"\\tLeft to Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Save As…\"; ObjectID = \"Bw7-FT-i3A\"; */\n\"Bw7-FT-i3A.title\" = \"Save As…\";\n\n/* Class = \"NSMenuItem\"; title = \"Close\"; ObjectID = \"DVo-aG-piG\"; */\n\"DVo-aG-piG.title\" = \"Close\";\n\n/* Class = \"NSMenuItem\"; title = \"Spelling and Grammar\"; ObjectID = \"Dv1-io-Yv7\"; */\n\"Dv1-io-Yv7.title\" = \"Spelling and Grammar\";\n\n/* Class = \"NSMenu\"; title = \"Help\"; ObjectID = \"F2S-fz-NVQ\"; */\n\"F2S-fz-NVQ.title\" = \"Help\";\n\n/* Class = \"NSMenuItem\"; title = \"WoodpeckerMacDemo Help\"; ObjectID = \"FKE-Sm-Kum\"; */\n\"FKE-Sm-Kum.title\" = \"WoodpeckerMacDemo Help\";\n\n/* Class = \"NSMenuItem\"; title = \"Text\"; ObjectID = \"Fal-I4-PZk\"; */\n\"Fal-I4-PZk.title\" = \"Text\";\n\n/* Class = \"NSTabViewItem\"; label = \"Tab\"; ObjectID = \"Fc1-Q2-KuF\"; */\n\"Fc1-Q2-KuF.label\" = \"Tab\";\n\n/* Class = \"NSMenu\"; title = \"Substitutions\"; ObjectID = \"FeM-D8-WVr\"; */\n\"FeM-D8-WVr.title\" = \"Substitutions\";\n\n/* Class = \"NSMenuItem\"; title = \"Bold\"; ObjectID = \"GB9-OM-e27\"; */\n\"GB9-OM-e27.title\" = \"Bold\";\n\n/* Class = \"NSMenu\"; title = \"Format\"; ObjectID = \"GEO-Iw-cKr\"; */\n\"GEO-Iw-cKr.title\" = \"Format\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"GUa-eO-cwY\"; */\n\"GUa-eO-cwY.title\" = \"Use Default\";\n\n/* Class = \"NSMenuItem\"; title = \"Font\"; ObjectID = \"Gi5-1S-RQB\"; */\n\"Gi5-1S-RQB.title\" = \"Font\";\n\n/* Class = \"NSMenuItem\"; title = \"Writing Direction\"; ObjectID = \"H1b-Si-o9J\"; */\n\"H1b-Si-o9J.title\" = \"Writing Direction\";\n\n/* Class = \"NSMenuItem\"; title = \"View\"; ObjectID = \"H8h-7b-M4v\"; */\n\"H8h-7b-M4v.title\" = \"View\";\n\n/* Class = \"NSMenuItem\"; title = \"Text Replacement\"; ObjectID = \"HFQ-gK-NFA\"; */\n\"HFQ-gK-NFA.title\" = \"Text Replacement\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Spelling and Grammar\"; ObjectID = \"HFo-cy-zxI\"; */\n\"HFo-cy-zxI.title\" = \"Show Spelling and Grammar\";\n\n/* Class = \"NSMenu\"; title = \"View\"; ObjectID = \"HyV-fh-RgO\"; */\n\"HyV-fh-RgO.title\" = \"View\";\n\n/* Class = \"NSMenuItem\"; title = \"Subscript\"; ObjectID = \"I0S-gh-46l\"; */\n\"I0S-gh-46l.title\" = \"Subscript\";\n\n/* Class = \"NSMenuItem\"; title = \"Open…\"; ObjectID = \"IAo-SY-fd9\"; */\n\"IAo-SY-fd9.title\" = \"Open…\";\n\n/* Class = \"NSMenuItem\"; title = \"Justify\"; ObjectID = \"J5U-5w-g23\"; */\n\"J5U-5w-g23.title\" = \"Justify\";\n\n/* Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"J7y-lM-qPV\"; */\n\"J7y-lM-qPV.title\" = \"Use None\";\n\n/* Class = \"NSMenuItem\"; title = \"Revert to Saved\"; ObjectID = \"KaW-ft-85H\"; */\n\"KaW-ft-85H.title\" = \"Revert to Saved\";\n\n/* Class = \"NSMenuItem\"; title = \"Show All\"; ObjectID = \"Kd2-mp-pUS\"; */\n\"Kd2-mp-pUS.title\" = \"Show All\";\n\n/* Class = \"NSMenuItem\"; title = \"Bring All to Front\"; ObjectID = \"LE2-aR-0XJ\"; */\n\"LE2-aR-0XJ.title\" = \"Bring All to Front\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste Ruler\"; ObjectID = \"LVM-kO-fVI\"; */\n\"LVM-kO-fVI.title\" = \"Paste Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tLeft to Right\"; ObjectID = \"Lbh-J2-qVU\"; */\n\"Lbh-J2-qVU.title\" = \"\\tLeft to Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy Ruler\"; ObjectID = \"MkV-Pr-PK5\"; */\n\"MkV-Pr-PK5.title\" = \"Copy Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"Services\"; ObjectID = \"NMo-om-nkz\"; */\n\"NMo-om-nkz.title\" = \"Services\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"Nop-cj-93Q\"; */\n\"Nop-cj-93Q.title\" = \"\\tDefault\";\n\n/* Class = \"NSMenuItem\"; title = \"Minimize\"; ObjectID = \"OY7-WF-poV\"; */\n\"OY7-WF-poV.title\" = \"Minimize\";\n\n/* Class = \"NSMenuItem\"; title = \"Baseline\"; ObjectID = \"OaQ-X3-Vso\"; */\n\"OaQ-X3-Vso.title\" = \"Baseline\";\n\n/* Class = \"NSMenuItem\"; title = \"Hide WoodpeckerMacDemo\"; ObjectID = \"Olw-nP-bQN\"; */\n\"Olw-nP-bQN.title\" = \"Hide WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Find Previous\"; ObjectID = \"OwM-mh-QMV\"; */\n\"OwM-mh-QMV.title\" = \"Find Previous\";\n\n/* Class = \"NSMenuItem\"; title = \"Stop Speaking\"; ObjectID = \"Oyz-dy-DGm\"; */\n\"Oyz-dy-DGm.title\" = \"Stop Speaking\";\n\n/* Class = \"NSMenuItem\"; title = \"Bigger\"; ObjectID = \"Ptp-SP-VEL\"; */\n\"Ptp-SP-VEL.title\" = \"Bigger\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Fonts\"; ObjectID = \"Q5e-8K-NDq\"; */\n\"Q5e-8K-NDq.title\" = \"Show Fonts\";\n\n/* Class = \"NSWindow\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"QvC-M9-y7g\"; */\n\"QvC-M9-y7g.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Zoom\"; ObjectID = \"R4o-n2-Eq4\"; */\n\"R4o-n2-Eq4.title\" = \"Zoom\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"RB4-Sm-HuC\"; */\n\"RB4-Sm-HuC.title\" = \"\\tRight to Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Superscript\"; ObjectID = \"Rqc-34-cIF\"; */\n\"Rqc-34-cIF.title\" = \"Superscript\";\n\n/* Class = \"NSMenuItem\"; title = \"Select All\"; ObjectID = \"Ruw-6m-B2m\"; */\n\"Ruw-6m-B2m.title\" = \"Select All\";\n\n/* Class = \"NSMenuItem\"; title = \"Jump to Selection\"; ObjectID = \"S0p-oC-mLd\"; */\n\"S0p-oC-mLd.title\" = \"Jump to Selection\";\n\n/* Class = \"NSMenu\"; title = \"Window\"; ObjectID = \"Td7-aD-5lo\"; */\n\"Td7-aD-5lo.title\" = \"Window\";\n\n/* Class = \"NSMenuItem\"; title = \"Capitalize\"; ObjectID = \"UEZ-Bs-lqG\"; */\n\"UEZ-Bs-lqG.title\" = \"Capitalize\";\n\n/* Class = \"NSMenuItem\"; title = \"Center\"; ObjectID = \"VIY-Ag-zcb\"; */\n\"VIY-Ag-zcb.title\" = \"Center\";\n\n/* Class = \"NSMenuItem\"; title = \"Hide Others\"; ObjectID = \"Vdr-fp-XzO\"; */\n\"Vdr-fp-XzO.title\" = \"Hide Others\";\n\n/* Class = \"NSMenuItem\"; title = \"Italic\"; ObjectID = \"Vjx-xi-njq\"; */\n\"Vjx-xi-njq.title\" = \"Italic\";\n\n/* Class = \"NSMenu\"; title = \"Edit\"; ObjectID = \"W48-6f-4Dl\"; */\n\"W48-6f-4Dl.title\" = \"Edit\";\n\n/* Class = \"NSMenuItem\"; title = \"Underline\"; ObjectID = \"WRG-CD-K1S\"; */\n\"WRG-CD-K1S.title\" = \"Underline\";\n\n/* Class = \"NSMenuItem\"; title = \"New\"; ObjectID = \"Was-JA-tGl\"; */\n\"Was-JA-tGl.title\" = \"New\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste and Match Style\"; ObjectID = \"WeT-3V-zwk\"; */\n\"WeT-3V-zwk.title\" = \"Paste and Match Style\";\n\n/* Class = \"NSMenuItem\"; title = \"Find…\"; ObjectID = \"Xz5-n4-O0W\"; */\n\"Xz5-n4-O0W.title\" = \"Find…\";\n\n/* Class = \"NSMenuItem\"; title = \"Find and Replace…\"; ObjectID = \"YEy-JH-Tfz\"; */\n\"YEy-JH-Tfz.title\" = \"Find and Replace…\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tDefault\"; ObjectID = \"YGs-j5-SAR\"; */\n\"YGs-j5-SAR.title\" = \"\\tDefault\";\n\n/* Class = \"NSMenuItem\"; title = \"Start Speaking\"; ObjectID = \"Ynk-f8-cLZ\"; */\n\"Ynk-f8-cLZ.title\" = \"Start Speaking\";\n\n/* Class = \"NSMenuItem\"; title = \"Align Left\"; ObjectID = \"ZM1-6Q-yy1\"; */\n\"ZM1-6Q-yy1.title\" = \"Align Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Paragraph\"; ObjectID = \"ZvO-Gk-QUH\"; */\n\"ZvO-Gk-QUH.title\" = \"Paragraph\";\n\n/* Class = \"NSMenuItem\"; title = \"Print…\"; ObjectID = \"aTl-1u-JFS\"; */\n\"aTl-1u-JFS.title\" = \"Print…\";\n\n/* Class = \"NSMenuItem\"; title = \"Window\"; ObjectID = \"aUF-d1-5bR\"; */\n\"aUF-d1-5bR.title\" = \"Window\";\n\n/* Class = \"NSMenu\"; title = \"Font\"; ObjectID = \"aXa-aM-Jaq\"; */\n\"aXa-aM-Jaq.title\" = \"Font\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Default\"; ObjectID = \"agt-UL-0e3\"; */\n\"agt-UL-0e3.title\" = \"Use Default\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Colors\"; ObjectID = \"bgn-CT-cEk\"; */\n\"bgn-CT-cEk.title\" = \"Show Colors\";\n\n/* Class = \"NSMenu\"; title = \"File\"; ObjectID = \"bib-Uj-vzu\"; */\n\"bib-Uj-vzu.title\" = \"File\";\n\n/* Class = \"NSMenuItem\"; title = \"Use Selection for Find\"; ObjectID = \"buJ-ug-pKt\"; */\n\"buJ-ug-pKt.title\" = \"Use Selection for Find\";\n\n/* Class = \"NSMenu\"; title = \"Transformations\"; ObjectID = \"c8a-y6-VQd\"; */\n\"c8a-y6-VQd.title\" = \"Transformations\";\n\n/* Class = \"NSMenuItem\"; title = \"Use None\"; ObjectID = \"cDB-IK-hbR\"; */\n\"cDB-IK-hbR.title\" = \"Use None\";\n\n/* Class = \"NSMenuItem\"; title = \"Selection\"; ObjectID = \"cqv-fj-IhA\"; */\n\"cqv-fj-IhA.title\" = \"Selection\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Links\"; ObjectID = \"cwL-P1-jid\"; */\n\"cwL-P1-jid.title\" = \"Smart Links\";\n\n/* Class = \"NSMenuItem\"; title = \"Make Lower Case\"; ObjectID = \"d9M-CD-aMd\"; */\n\"d9M-CD-aMd.title\" = \"Make Lower Case\";\n\n/* Class = \"NSMenu\"; title = \"Text\"; ObjectID = \"d9c-me-L2H\"; */\n\"d9c-me-L2H.title\" = \"Text\";\n\n/* Class = \"NSMenuItem\"; title = \"File\"; ObjectID = \"dMs-cI-mzQ\"; */\n\"dMs-cI-mzQ.title\" = \"File\";\n\n/* Class = \"NSMenuItem\"; title = \"Undo\"; ObjectID = \"dRJ-4n-Yzg\"; */\n\"dRJ-4n-Yzg.title\" = \"Undo\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste\"; ObjectID = \"gVA-U4-sdL\"; */\n\"gVA-U4-sdL.title\" = \"Paste\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Quotes\"; ObjectID = \"hQb-2v-fYv\"; */\n\"hQb-2v-fYv.title\" = \"Smart Quotes\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Document Now\"; ObjectID = \"hz2-CU-CR7\"; */\n\"hz2-CU-CR7.title\" = \"Check Document Now\";\n\n/* Class = \"NSMenu\"; title = \"Services\"; ObjectID = \"hz9-B4-Xy5\"; */\n\"hz9-B4-Xy5.title\" = \"Services\";\n\n/* Class = \"NSMenuItem\"; title = \"Smaller\"; ObjectID = \"i1d-Er-qST\"; */\n\"i1d-Er-qST.title\" = \"Smaller\";\n\n/* Class = \"NSMenu\"; title = \"Baseline\"; ObjectID = \"ijk-EB-dga\"; */\n\"ijk-EB-dga.title\" = \"Baseline\";\n\n/* Class = \"NSMenuItem\"; title = \"Kern\"; ObjectID = \"jBQ-r6-VK2\"; */\n\"jBQ-r6-VK2.title\" = \"Kern\";\n\n/* Class = \"NSMenuItem\"; title = \"\\tRight to Left\"; ObjectID = \"jFq-tB-4Kx\"; */\n\"jFq-tB-4Kx.title\" = \"\\tRight to Left\";\n\n/* Class = \"NSMenuItem\"; title = \"Format\"; ObjectID = \"jxT-CU-nIS\"; */\n\"jxT-CU-nIS.title\" = \"Format\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Sidebar\"; ObjectID = \"kIP-vf-haE\"; */\n\"kIP-vf-haE.title\" = \"Show Sidebar\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Grammar With Spelling\"; ObjectID = \"mK6-2p-4JG\"; */\n\"mK6-2p-4JG.title\" = \"Check Grammar With Spelling\";\n\n/* Class = \"NSMenuItem\"; title = \"Ligatures\"; ObjectID = \"o6e-r0-MWq\"; */\n\"o6e-r0-MWq.title\" = \"Ligatures\";\n\n/* Class = \"NSMenu\"; title = \"Open Recent\"; ObjectID = \"oas-Oc-fiZ\"; */\n\"oas-Oc-fiZ.title\" = \"Open Recent\";\n\n/* Class = \"NSMenuItem\"; title = \"Loosen\"; ObjectID = \"ogc-rX-tC1\"; */\n\"ogc-rX-tC1.title\" = \"Loosen\";\n\n/* Class = \"NSMenuItem\"; title = \"Delete\"; ObjectID = \"pa3-QI-u2k\"; */\n\"pa3-QI-u2k.title\" = \"Delete\";\n\n/* Class = \"NSMenuItem\"; title = \"Save…\"; ObjectID = \"pxx-59-PXV\"; */\n\"pxx-59-PXV.title\" = \"Save…\";\n\n/* Class = \"NSMenuItem\"; title = \"Find Next\"; ObjectID = \"q09-fT-Sye\"; */\n\"q09-fT-Sye.title\" = \"Find Next\";\n\n/* Class = \"NSMenuItem\"; title = \"Page Setup…\"; ObjectID = \"qIS-W8-SiK\"; */\n\"qIS-W8-SiK.title\" = \"Page Setup…\";\n\n/* Class = \"NSMenuItem\"; title = \"Check Spelling While Typing\"; ObjectID = \"rbD-Rh-wIN\"; */\n\"rbD-Rh-wIN.title\" = \"Check Spelling While Typing\";\n\n/* Class = \"NSMenuItem\"; title = \"Smart Dashes\"; ObjectID = \"rgM-f4-ycn\"; */\n\"rgM-f4-ycn.title\" = \"Smart Dashes\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Toolbar\"; ObjectID = \"snW-S8-Cw5\"; */\n\"snW-S8-Cw5.title\" = \"Show Toolbar\";\n\n/* Class = \"NSMenuItem\"; title = \"Data Detectors\"; ObjectID = \"tRr-pd-1PS\"; */\n\"tRr-pd-1PS.title\" = \"Data Detectors\";\n\n/* Class = \"NSMenuItem\"; title = \"Open Recent\"; ObjectID = \"tXI-mr-wws\"; */\n\"tXI-mr-wws.title\" = \"Open Recent\";\n\n/* Class = \"NSMenu\"; title = \"Kern\"; ObjectID = \"tlD-Oa-oAM\"; */\n\"tlD-Oa-oAM.title\" = \"Kern\";\n\n/* Class = \"NSMenu\"; title = \"WoodpeckerMacDemo\"; ObjectID = \"uQy-DD-JDr\"; */\n\"uQy-DD-JDr.title\" = \"WoodpeckerMacDemo\";\n\n/* Class = \"NSMenuItem\"; title = \"Cut\"; ObjectID = \"uRl-iY-unG\"; */\n\"uRl-iY-unG.title\" = \"Cut\";\n\n/* Class = \"NSMenuItem\"; title = \"Paste Style\"; ObjectID = \"vKC-jM-MkH\"; */\n\"vKC-jM-MkH.title\" = \"Paste Style\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Ruler\"; ObjectID = \"vLm-3I-IUL\"; */\n\"vLm-3I-IUL.title\" = \"Show Ruler\";\n\n/* Class = \"NSMenuItem\"; title = \"Clear Menu\"; ObjectID = \"vNY-rz-j42\"; */\n\"vNY-rz-j42.title\" = \"Clear Menu\";\n\n/* Class = \"NSMenuItem\"; title = \"Make Upper Case\"; ObjectID = \"vmV-6d-7jI\"; */\n\"vmV-6d-7jI.title\" = \"Make Upper Case\";\n\n/* Class = \"NSMenu\"; title = \"Ligatures\"; ObjectID = \"w0m-vy-SC9\"; */\n\"w0m-vy-SC9.title\" = \"Ligatures\";\n\n/* Class = \"NSMenuItem\"; title = \"Align Right\"; ObjectID = \"wb2-vD-lq4\"; */\n\"wb2-vD-lq4.title\" = \"Align Right\";\n\n/* Class = \"NSMenuItem\"; title = \"Help\"; ObjectID = \"wpr-3q-Mcd\"; */\n\"wpr-3q-Mcd.title\" = \"Help\";\n\n/* Class = \"NSMenuItem\"; title = \"Copy\"; ObjectID = \"x3v-GG-iWU\"; */\n\"x3v-GG-iWU.title\" = \"Copy\";\n\n/* Class = \"NSMenuItem\"; title = \"Use All\"; ObjectID = \"xQD-1f-W4t\"; */\n\"xQD-1f-W4t.title\" = \"Use All\";\n\n/* Class = \"NSMenuItem\"; title = \"Speech\"; ObjectID = \"xrE-MZ-jX0\"; */\n\"xrE-MZ-jX0.title\" = \"Speech\";\n\n/* Class = \"NSMenuItem\"; title = \"Show Substitutions\"; ObjectID = \"z6F-FW-3nz\"; */\n\"z6F-FW-3nz.title\" = \"Show Substitutions\";\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1F28FB5822A293E700C2CF25 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB5722A293E700C2CF25 /* AppDelegate.swift */; };\n\t\t1F28FB5A22A293E900C2CF25 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB5922A293E900C2CF25 /* Assets.xcassets */; };\n\t\t1F28FB5D22A293E900C2CF25 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB5B22A293E900C2CF25 /* MainMenu.xib */; };\n\t\t1F28FB6922A2ABAE00C2CF25 /* SandboxViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB6722A2ABAE00C2CF25 /* SandboxViewController.swift */; };\n\t\t1F28FB6A22A2ABAE00C2CF25 /* SandboxViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB6822A2ABAE00C2CF25 /* SandboxViewController.xib */; };\n\t\t1F28FB6E22A2B21000C2CF25 /* NetworkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB6C22A2B21000C2CF25 /* NetworkViewController.swift */; };\n\t\t1F28FB6F22A2B21000C2CF25 /* NetworkViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB6D22A2B21000C2CF25 /* NetworkViewController.xib */; };\n\t\t1F28FB7322A2B31F00C2CF25 /* UserDefaultsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB7122A2B31F00C2CF25 /* UserDefaultsViewController.swift */; };\n\t\t1F28FB7422A2B31F00C2CF25 /* UserDefaultsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB7222A2B31F00C2CF25 /* UserDefaultsViewController.xib */; };\n\t\t1F28FB7822A2B47400C2CF25 /* BundleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB7622A2B47400C2CF25 /* BundleViewController.swift */; };\n\t\t1F28FB7922A2B47400C2CF25 /* BundleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB7722A2B47400C2CF25 /* BundleViewController.xib */; };\n\t\t1F28FB7D22A2B50B00C2CF25 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB7B22A2B50B00C2CF25 /* NotificationViewController.swift */; };\n\t\t1F28FB7E22A2B50B00C2CF25 /* NotificationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB7C22A2B50B00C2CF25 /* NotificationViewController.xib */; };\n\t\t1F28FB8222A2B94200C2CF25 /* LocalizationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F28FB8022A2B94200C2CF25 /* LocalizationViewController.swift */; };\n\t\t1F28FB8322A2B94200C2CF25 /* LocalizationViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB8122A2B94200C2CF25 /* LocalizationViewController.xib */; };\n\t\t1F28FB8E22A2C1C800C2CF25 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 1F28FB9022A2C1C800C2CF25 /* Localizable.strings */; };\n\t\t1F28FBB622A3F9CC00C2CF25 /* WoodpeckerMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F28FBB522A3F9CC00C2CF25 /* WoodpeckerMacOS.framework */; };\n\t\t1F28FBB722A3F9CC00C2CF25 /* WoodpeckerMacOS.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1F28FBB522A3F9CC00C2CF25 /* WoodpeckerMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t1F28FBB422A3F99700C2CF25 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 12;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t1F28FBB722A3F9CC00C2CF25 /* WoodpeckerMacOS.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1F28FB5422A293E700C2CF25 /* WoodpeckerMacDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WoodpeckerMacDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t1F28FB5722A293E700C2CF25 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB5922A293E900C2CF25 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t1F28FB5E22A293E900C2CF25 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\t1F28FB5F22A293E900C2CF25 /* WoodpeckerMacDemo.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WoodpeckerMacDemo.entitlements; sourceTree = \"<group>\"; };\n\t\t1F28FB6722A2ABAE00C2CF25 /* SandboxViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SandboxViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB6822A2ABAE00C2CF25 /* SandboxViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SandboxViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB6C22A2B21000C2CF25 /* NetworkViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB6D22A2B21000C2CF25 /* NetworkViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NetworkViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB7122A2B31F00C2CF25 /* UserDefaultsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB7222A2B31F00C2CF25 /* UserDefaultsViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = UserDefaultsViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB7622A2B47400C2CF25 /* BundleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BundleViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB7722A2B47400C2CF25 /* BundleViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BundleViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB7B22A2B50B00C2CF25 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB7C22A2B50B00C2CF25 /* NotificationViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NotificationViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB8022A2B94200C2CF25 /* LocalizationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalizationViewController.swift; sourceTree = \"<group>\"; };\n\t\t1F28FB8122A2B94200C2CF25 /* LocalizationViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = LocalizationViewController.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB8F22A2C1C800C2CF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\t1F28FB9122A2C1C900C2CF25 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = \"zh-Hans\"; path = \"zh-Hans.lproj/Localizable.strings\"; sourceTree = \"<group>\"; };\n\t\t1F28FB9422A2C22F00C2CF25 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = \"<group>\"; };\n\t\t1F28FB9622A2C29A00C2CF25 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB9722A2C2AC00C2CF25 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = \"<group>\"; };\n\t\t1F28FB9D22A2C4FA00C2CF25 /* UserNotifications.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UserNotifications.framework; path = System/Library/Frameworks/UserNotifications.framework; sourceTree = SDKROOT; };\n\t\t1F28FBB522A3F9CC00C2CF25 /* WoodpeckerMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WoodpeckerMacOS.framework; path = ../WoodpeckerMacOS.framework; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t1F28FB5122A293E700C2CF25 /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F28FBB622A3F9CC00C2CF25 /* WoodpeckerMacOS.framework in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t1F28FB4B22A293E700C2CF25 = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FBB522A3F9CC00C2CF25 /* WoodpeckerMacOS.framework */,\n\t\t\t\t1F28FB5622A293E700C2CF25 /* WoodpeckerMacDemo */,\n\t\t\t\t1F28FB5522A293E700C2CF25 /* Products */,\n\t\t\t\t1F28FB9C22A2C4F900C2CF25 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB5522A293E700C2CF25 /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB5422A293E700C2CF25 /* WoodpeckerMacDemo.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB5622A293E700C2CF25 /* WoodpeckerMacDemo */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB6522A2AA1B00C2CF25 /* Pages */,\n\t\t\t\t1F28FB5722A293E700C2CF25 /* AppDelegate.swift */,\n\t\t\t\t1F28FB5922A293E900C2CF25 /* Assets.xcassets */,\n\t\t\t\t1F28FB5B22A293E900C2CF25 /* MainMenu.xib */,\n\t\t\t\t1F28FB5E22A293E900C2CF25 /* Info.plist */,\n\t\t\t\t1F28FB9022A2C1C800C2CF25 /* Localizable.strings */,\n\t\t\t\t1F28FB5F22A293E900C2CF25 /* WoodpeckerMacDemo.entitlements */,\n\t\t\t);\n\t\t\tpath = WoodpeckerMacDemo;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB6522A2AA1B00C2CF25 /* Pages */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB6622A2AA2000C2CF25 /* Sandbox */,\n\t\t\t\t1F28FB7022A2B2F900C2CF25 /* UserDefaults */,\n\t\t\t\t1F28FB6B22A2B20000C2CF25 /* Network */,\n\t\t\t\t1F28FB7522A2B46700C2CF25 /* Bundle */,\n\t\t\t\t1F28FB7A22A2B4F900C2CF25 /* Notification */,\n\t\t\t\t1F28FB7F22A2B93400C2CF25 /* Localization */,\n\t\t\t);\n\t\t\tpath = Pages;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB6622A2AA2000C2CF25 /* Sandbox */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB6722A2ABAE00C2CF25 /* SandboxViewController.swift */,\n\t\t\t\t1F28FB6822A2ABAE00C2CF25 /* SandboxViewController.xib */,\n\t\t\t);\n\t\t\tpath = Sandbox;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB6B22A2B20000C2CF25 /* Network */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB6C22A2B21000C2CF25 /* NetworkViewController.swift */,\n\t\t\t\t1F28FB6D22A2B21000C2CF25 /* NetworkViewController.xib */,\n\t\t\t);\n\t\t\tname = Network;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB7022A2B2F900C2CF25 /* UserDefaults */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB7122A2B31F00C2CF25 /* UserDefaultsViewController.swift */,\n\t\t\t\t1F28FB7222A2B31F00C2CF25 /* UserDefaultsViewController.xib */,\n\t\t\t);\n\t\t\tpath = UserDefaults;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB7522A2B46700C2CF25 /* Bundle */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB7622A2B47400C2CF25 /* BundleViewController.swift */,\n\t\t\t\t1F28FB7722A2B47400C2CF25 /* BundleViewController.xib */,\n\t\t\t);\n\t\t\tpath = Bundle;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB7A22A2B4F900C2CF25 /* Notification */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB7B22A2B50B00C2CF25 /* NotificationViewController.swift */,\n\t\t\t\t1F28FB7C22A2B50B00C2CF25 /* NotificationViewController.xib */,\n\t\t\t);\n\t\t\tpath = Notification;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB7F22A2B93400C2CF25 /* Localization */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB8022A2B94200C2CF25 /* LocalizationViewController.swift */,\n\t\t\t\t1F28FB8122A2B94200C2CF25 /* LocalizationViewController.xib */,\n\t\t\t);\n\t\t\tpath = Localization;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB9C22A2C4F900C2CF25 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB9D22A2C4FA00C2CF25 /* UserNotifications.framework */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t1F28FB5322A293E700C2CF25 /* WoodpeckerMacDemo */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 1F28FB6222A293E900C2CF25 /* Build configuration list for PBXNativeTarget \"WoodpeckerMacDemo\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t1F28FB5022A293E700C2CF25 /* Sources */,\n\t\t\t\t1F28FB5122A293E700C2CF25 /* Frameworks */,\n\t\t\t\t1F28FB5222A293E700C2CF25 /* Resources */,\n\t\t\t\t1F28FBB422A3F99700C2CF25 /* Embed Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = WoodpeckerMacDemo;\n\t\t\tproductName = WoodpeckerMacDemo;\n\t\t\tproductReference = 1F28FB5422A293E700C2CF25 /* WoodpeckerMacDemo.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t1F28FB4C22A293E700C2CF25 /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastSwiftUpdateCheck = 1010;\n\t\t\t\tLastUpgradeCheck = 1010;\n\t\t\t\tORGANIZATIONNAME = \"LIFE BETTER\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t1F28FB5322A293E700C2CF25 = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 10.1;\n\t\t\t\t\t\tSystemCapabilities = {\n\t\t\t\t\t\t\tcom.apple.Push = {\n\t\t\t\t\t\t\t\tenabled = 0;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcom.apple.Sandbox = {\n\t\t\t\t\t\t\t\tenabled = 1;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 1F28FB4F22A293E700C2CF25 /* Build configuration list for PBXProject \"WoodpeckerMacDemo\" */;\n\t\t\tcompatibilityVersion = \"Xcode 9.3\";\n\t\t\tdevelopmentRegion = en;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t\t\"zh-Hans\",\n\t\t\t\tfr,\n\t\t\t);\n\t\t\tmainGroup = 1F28FB4B22A293E700C2CF25;\n\t\t\tproductRefGroup = 1F28FB5522A293E700C2CF25 /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t1F28FB5322A293E700C2CF25 /* WoodpeckerMacDemo */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t1F28FB5222A293E700C2CF25 /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F28FB6A22A2ABAE00C2CF25 /* SandboxViewController.xib in Resources */,\n\t\t\t\t1F28FB5A22A293E900C2CF25 /* Assets.xcassets in Resources */,\n\t\t\t\t1F28FB7422A2B31F00C2CF25 /* UserDefaultsViewController.xib in Resources */,\n\t\t\t\t1F28FB5D22A293E900C2CF25 /* MainMenu.xib in Resources */,\n\t\t\t\t1F28FB8E22A2C1C800C2CF25 /* Localizable.strings in Resources */,\n\t\t\t\t1F28FB7922A2B47400C2CF25 /* BundleViewController.xib in Resources */,\n\t\t\t\t1F28FB6F22A2B21000C2CF25 /* NetworkViewController.xib in Resources */,\n\t\t\t\t1F28FB7E22A2B50B00C2CF25 /* NotificationViewController.xib in Resources */,\n\t\t\t\t1F28FB8322A2B94200C2CF25 /* LocalizationViewController.xib in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t1F28FB5022A293E700C2CF25 /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t1F28FB6922A2ABAE00C2CF25 /* SandboxViewController.swift in Sources */,\n\t\t\t\t1F28FB7822A2B47400C2CF25 /* BundleViewController.swift in Sources */,\n\t\t\t\t1F28FB7D22A2B50B00C2CF25 /* NotificationViewController.swift in Sources */,\n\t\t\t\t1F28FB6E22A2B21000C2CF25 /* NetworkViewController.swift in Sources */,\n\t\t\t\t1F28FB7322A2B31F00C2CF25 /* UserDefaultsViewController.swift in Sources */,\n\t\t\t\t1F28FB8222A2B94200C2CF25 /* LocalizationViewController.swift in Sources */,\n\t\t\t\t1F28FB5822A293E700C2CF25 /* AppDelegate.swift in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t1F28FB5B22A293E900C2CF25 /* MainMenu.xib */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB9622A2C29A00C2CF25 /* en */,\n\t\t\t\t1F28FB9722A2C2AC00C2CF25 /* Base */,\n\t\t\t);\n\t\t\tname = MainMenu.xib;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t1F28FB9022A2C1C800C2CF25 /* Localizable.strings */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t1F28FB8F22A2C1C800C2CF25 /* en */,\n\t\t\t\t1F28FB9122A2C1C900C2CF25 /* zh-Hans */,\n\t\t\t\t1F28FB9422A2C22F00C2CF25 /* fr */,\n\t\t\t);\n\t\t\tname = Localizable.strings;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t1F28FB6022A293E900C2CF25 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-Onone\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F28FB6122A293E900C2CF25 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++14\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_WEAK = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_DOCUMENTATION_COMMENTS = YES;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu11;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tMTL_FAST_MATH = YES;\n\t\t\t\tSDKROOT = macosx;\n\t\t\t\tSWIFT_COMPILATION_MODE = wholemodule;\n\t\t\t\tSWIFT_OPTIMIZATION_LEVEL = \"-O\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t1F28FB6322A293E900C2CF25 /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = WoodpeckerMacDemo/WoodpeckerMacDemo.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(PROJECT_DIR)/../\";\n\t\t\t\tINFOPLIST_FILE = WoodpeckerMacDemo/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.woodpecker.macdemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t1F28FB6422A293E900C2CF25 /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCODE_SIGN_ENTITLEMENTS = WoodpeckerMacDemo/WoodpeckerMacDemo.entitlements;\n\t\t\t\tCODE_SIGN_IDENTITY = \"Mac Developer\";\n\t\t\t\tCODE_SIGN_STYLE = Automatic;\n\t\t\t\tCOMBINE_HIDPI_IMAGES = YES;\n\t\t\t\tDEVELOPMENT_TEAM = 8HG49Q463F;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = \"$(PROJECT_DIR)/../\";\n\t\t\t\tINFOPLIST_FILE = WoodpeckerMacDemo/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"@executable_path/../Frameworks\",\n\t\t\t\t);\n\t\t\t\tMACOSX_DEPLOYMENT_TARGET = 10.14;\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = lifebetter.woodpecker.macdemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tPROVISIONING_PROFILE_SPECIFIER = \"\";\n\t\t\t\tSWIFT_VERSION = 4.2;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t1F28FB4F22A293E700C2CF25 /* Build configuration list for PBXProject \"WoodpeckerMacDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F28FB6022A293E900C2CF25 /* Debug */,\n\t\t\t\t1F28FB6122A293E900C2CF25 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t1F28FB6222A293E900C2CF25 /* Build configuration list for PBXNativeTarget \"WoodpeckerMacDemo\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t1F28FB6322A293E900C2CF25 /* Debug */,\n\t\t\t\t1F28FB6422A293E900C2CF25 /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 1F28FB4C22A293E700C2CF25 /* Project object */;\n}\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:WoodpeckerMacDemo.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "WoodpeckerMacDemo/WoodpeckerMacDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>IDEDidComputeMac32BitWarning</key>\n\t<true/>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodpeckerMacOS-Carthage.json",
    "content": "{\n\t\"1.2.2\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.2/WoodpeckerMacOS.framework.zip\",\n\t\"1.2.3\": \"https://github.com/appwoodpecker/woodpecker-ios/releases/download/1.2.3/WoodpeckerMacOS.framework.zip\"\n}"
  },
  {
    "path": "WoodpeckerMacOS.framework/Versions/A/Headers/WoodpeckerMacOS.h",
    "content": "//\n//  WoodpeckerMacOS.h\n//  WoodpeckerMacOS\n//\n//  Created by 张小刚 on 2019/5/25.\n//  Copyright © 2019 lifebetter. All rights reserved.\n//\n\n#import <Cocoa/Cocoa.h>\n\n//! Project version number for WoodpeckerMacOS.\nFOUNDATION_EXPORT double WoodpeckerMacOSVersionNumber;\n\n//! Project version string for WoodpeckerMacOS.\nFOUNDATION_EXPORT const unsigned char WoodpeckerMacOSVersionString[];\n\n// In this header, you should import all the public headers of your framework using statements like #import <WoodpeckerMacOS/PublicHeader.h>\n\n\n"
  },
  {
    "path": "WoodpeckerMacOS.framework/Versions/A/Modules/module.modulemap",
    "content": "framework module WoodpeckerMacOS {\n  umbrella header \"WoodpeckerMacOS.h\"\n\n  export *\n  module * { export * }\n}\n"
  },
  {
    "path": "WoodpeckerMacOS.framework/Versions/A/Resources/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>BuildMachineOSBuild</key>\n\t<string>18G95</string>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>WoodpeckerMacOS</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>lifebetter.WoodpeckerMacOS</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>WoodpeckerMacOS</string>\n\t<key>CFBundlePackageType</key>\n\t<string>FMWK</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.2.3</string>\n\t<key>CFBundleSupportedPlatforms</key>\n\t<array>\n\t\t<string>MacOSX</string>\n\t</array>\n\t<key>CFBundleVersion</key>\n\t<string>3</string>\n\t<key>DTCompiler</key>\n\t<string>com.apple.compilers.llvm.clang.1_0</string>\n\t<key>DTPlatformBuild</key>\n\t<string>10E125</string>\n\t<key>DTPlatformVersion</key>\n\t<string>GM</string>\n\t<key>DTSDKBuild</key>\n\t<string>18E219</string>\n\t<key>DTSDKName</key>\n\t<string>macosx10.14</string>\n\t<key>DTXcode</key>\n\t<string>1020</string>\n\t<key>DTXcodeBuild</key>\n\t<string>10E125</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2019 lifebetter. All rights reserved.</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodpeckerMacOS.framework/Versions/A/_CodeSignature/CodeResources",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>files</key>\n\t<dict>\n\t\t<key>Resources/ADHMacConnectViewController.nib</key>\n\t\t<data>\n\t\txv4hw5K05XweFL8yo4SvhRe6iuA=\n\t\t</data>\n\t\t<key>Resources/ADHMacRemoteServiceCell.nib</key>\n\t\t<data>\n\t\tPwT+Vf/3uiEQ07kEoB+bxctC3ig=\n\t\t</data>\n\t\t<key>Resources/Assets.car</key>\n\t\t<data>\n\t\tdrF2c1X3KZ8G8rfjj/ZCG8dtmsA=\n\t\t</data>\n\t\t<key>Resources/Info.plist</key>\n\t\t<data>\n\t\th8fXUtx7BucUT2L+BZd0cDra6z0=\n\t\t</data>\n\t</dict>\n\t<key>files2</key>\n\t<dict>\n\t\t<key>Headers/WoodpeckerMacOS.h</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tIJgaVpTyl/wSjxnxiMzm1KAAe/0=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t0aVl9RUwy9K0vZYxWDDsjJn+YoLAOseRV1Pqrp+cw8Q=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Modules/module.modulemap</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tVfrh7l2Yqto0AXGSDnRurzVWQQI=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tVXf9mIvGL2chs9uSGGZyBkYt4C5rHITxOg5NhaWDWr0=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Resources/ADHMacConnectViewController.nib</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\txv4hw5K05XweFL8yo4SvhRe6iuA=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tBBy+7WaykV/J1lSxuCpIjxy/OxR+kpM860OBLraHnc4=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Resources/ADHMacRemoteServiceCell.nib</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tPwT+Vf/3uiEQ07kEoB+bxctC3ig=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t9nPygjKQXftdZ53UuKfToGJUkHmdxdQQK3k9yIITKDs=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Resources/Assets.car</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\tdrF2c1X3KZ8G8rfjj/ZCG8dtmsA=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\tG+QlMVdOTbGAl4WNOQMcKRSdeLnb8YNHNhHEVcFyFDM=\n\t\t\t</data>\n\t\t</dict>\n\t\t<key>Resources/Info.plist</key>\n\t\t<dict>\n\t\t\t<key>hash</key>\n\t\t\t<data>\n\t\t\th8fXUtx7BucUT2L+BZd0cDra6z0=\n\t\t\t</data>\n\t\t\t<key>hash2</key>\n\t\t\t<data>\n\t\t\t4dyjAzSCCcyBX0c+lIL+HfyNWNm3H7ugEdSFjBMqlFE=\n\t\t\t</data>\n\t\t</dict>\n\t</dict>\n\t<key>rules</key>\n\t<dict>\n\t\t<key>^Resources/</key>\n\t\t<true/>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^version.plist$</key>\n\t\t<true/>\n\t</dict>\n\t<key>rules2</key>\n\t<dict>\n\t\t<key>.*\\.dSYM($|/)</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>11</real>\n\t\t</dict>\n\t\t<key>^(.*/)?\\.DS_Store$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>2000</real>\n\t\t</dict>\n\t\t<key>^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^.*</key>\n\t\t<true/>\n\t\t<key>^Info\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^PkgInfo$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>optional</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1000</real>\n\t\t</dict>\n\t\t<key>^Resources/.*\\.lproj/locversion.plist$</key>\n\t\t<dict>\n\t\t\t<key>omit</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>1100</real>\n\t\t</dict>\n\t\t<key>^Resources/Base\\.lproj/</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>1010</real>\n\t\t</dict>\n\t\t<key>^[^/]+$</key>\n\t\t<dict>\n\t\t\t<key>nested</key>\n\t\t\t<true/>\n\t\t\t<key>weight</key>\n\t\t\t<real>10</real>\n\t\t</dict>\n\t\t<key>^embedded\\.provisionprofile$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t\t<key>^version\\.plist$</key>\n\t\t<dict>\n\t\t\t<key>weight</key>\n\t\t\t<real>20</real>\n\t\t</dict>\n\t</dict>\n</dict>\n</plist>\n"
  },
  {
    "path": "WoodpeckerMacOS.podspec",
    "content": "Pod::Spec.new do |s|\n\n  s.name                        = \"WoodpeckerMacOS\"\n  s.version                     = \"1.2.3\"\n  s.summary                     = \"MacOS framework for Woodpekcer\"\n  s.description                 = \"Woodpecker is a handy, powerful Mac app for iOS, MacOS developer, it helps you view, modify sandbox files, monitor network, run javascript in WebView, and more...\"\n  s.homepage                    = \"http://www.woodpeck.cn\"\n  s.authors                     = { \"Woodpecker\" => \"woodperckerapp@163.com\" }\n  s.platform                    = :osx, \"10.11\"\n  s.source                      = { :git => \"https://github.com/appwoodpecker/woodpecker-ios.git\", :tag => \"#{s.version}\" }\n  s.vendored_frameworks         = \"WoodpeckerMacOS.framework\"\n  s.license                     = { :type => 'Copyright', :file => 'LICENSE' }\n\nend\n"
  }
]