add installer code

This commit is contained in:
Laurent Sansonetti
2012-04-02 18:54:06 +02:00
parent 93d622349e
commit 94cfc5e5a0
19 changed files with 5904 additions and 0 deletions

View File

@@ -0,0 +1,310 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {
/* Begin PBXBuildFile section */
4DAE74D0152A0F5800751094 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DAE74CF152A0F5800751094 /* Cocoa.framework */; };
4DAE74DA152A0F5800751094 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74D8152A0F5800751094 /* InfoPlist.strings */; };
4DAE74DC152A0F5800751094 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DAE74DB152A0F5800751094 /* main.m */; };
4DAE74E3152A0F5800751094 /* RMAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DAE74E2152A0F5800751094 /* RMAppDelegate.m */; };
4DAE74E6152A0F5800751094 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74E4152A0F5800751094 /* MainMenu.xib */; };
4DAE74F3152A0FFF00751094 /* eula.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74EC152A0FFF00751094 /* eula.rtf */; };
4DAE74F4152A0FFF00751094 /* icon.icns in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74ED152A0FFF00751094 /* icon.icns */; };
4DAE74F5152A0FFF00751094 /* logo_bottom.png in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74EE152A0FFF00751094 /* logo_bottom.png */; };
4DAE74F6152A0FFF00751094 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74EF152A0FFF00751094 /* logo.png */; };
4DAE74F7152A0FFF00751094 /* MainWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 4DAE74F0152A0FFF00751094 /* MainWindow.xib */; };
4DAE74F8152A0FFF00751094 /* RMMainWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4DAE74F2152A0FFF00751094 /* RMMainWindowController.m */; };
4DAE74FA152A102100751094 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DAE74F9152A102100751094 /* QuartzCore.framework */; };
4DAE74FC152A102700751094 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DAE74FB152A102700751094 /* Security.framework */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
4DAE74CB152A0F5800751094 /* RubyMotion Installer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RubyMotion Installer.app"; sourceTree = BUILT_PRODUCTS_DIR; };
4DAE74CF152A0F5800751094 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
4DAE74D2152A0F5800751094 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
4DAE74D3152A0F5800751094 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
4DAE74D4152A0F5800751094 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
4DAE74D7152A0F5800751094 /* RubyMotion Installer-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "RubyMotion Installer-Info.plist"; sourceTree = "<group>"; };
4DAE74D9152A0F5800751094 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
4DAE74DB152A0F5800751094 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
4DAE74DD152A0F5800751094 /* RubyMotion Installer-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "RubyMotion Installer-Prefix.pch"; sourceTree = "<group>"; };
4DAE74E1152A0F5800751094 /* RMAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RMAppDelegate.h; sourceTree = "<group>"; };
4DAE74E2152A0F5800751094 /* RMAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RMAppDelegate.m; sourceTree = "<group>"; };
4DAE74E5152A0F5800751094 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = "<group>"; };
4DAE74EC152A0FFF00751094 /* eula.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = eula.rtf; sourceTree = "<group>"; };
4DAE74ED152A0FFF00751094 /* icon.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = icon.icns; sourceTree = "<group>"; };
4DAE74EE152A0FFF00751094 /* logo_bottom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo_bottom.png; sourceTree = "<group>"; };
4DAE74EF152A0FFF00751094 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = "<group>"; };
4DAE74F0152A0FFF00751094 /* MainWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainWindow.xib; sourceTree = "<group>"; };
4DAE74F1152A0FFF00751094 /* RMMainWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RMMainWindowController.h; sourceTree = "<group>"; };
4DAE74F2152A0FFF00751094 /* RMMainWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RMMainWindowController.m; sourceTree = "<group>"; };
4DAE74F9152A102100751094 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
4DAE74FB152A102700751094 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
4DAE74C8152A0F5800751094 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
4DAE74FC152A102700751094 /* Security.framework in Frameworks */,
4DAE74FA152A102100751094 /* QuartzCore.framework in Frameworks */,
4DAE74D0152A0F5800751094 /* Cocoa.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
4DAE74C0152A0F5800751094 = {
isa = PBXGroup;
children = (
4DAE74FB152A102700751094 /* Security.framework */,
4DAE74F9152A102100751094 /* QuartzCore.framework */,
4DAE74D5152A0F5800751094 /* RubyMotion Installer */,
4DAE74CE152A0F5800751094 /* Frameworks */,
4DAE74CC152A0F5800751094 /* Products */,
);
sourceTree = "<group>";
};
4DAE74CC152A0F5800751094 /* Products */ = {
isa = PBXGroup;
children = (
4DAE74CB152A0F5800751094 /* RubyMotion Installer.app */,
);
name = Products;
sourceTree = "<group>";
};
4DAE74CE152A0F5800751094 /* Frameworks */ = {
isa = PBXGroup;
children = (
4DAE74CF152A0F5800751094 /* Cocoa.framework */,
4DAE74D1152A0F5800751094 /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
4DAE74D1152A0F5800751094 /* Other Frameworks */ = {
isa = PBXGroup;
children = (
4DAE74D2152A0F5800751094 /* AppKit.framework */,
4DAE74D3152A0F5800751094 /* CoreData.framework */,
4DAE74D4152A0F5800751094 /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
4DAE74D5152A0F5800751094 /* RubyMotion Installer */ = {
isa = PBXGroup;
children = (
4DAE74EC152A0FFF00751094 /* eula.rtf */,
4DAE74ED152A0FFF00751094 /* icon.icns */,
4DAE74EE152A0FFF00751094 /* logo_bottom.png */,
4DAE74EF152A0FFF00751094 /* logo.png */,
4DAE74F0152A0FFF00751094 /* MainWindow.xib */,
4DAE74F1152A0FFF00751094 /* RMMainWindowController.h */,
4DAE74F2152A0FFF00751094 /* RMMainWindowController.m */,
4DAE74E1152A0F5800751094 /* RMAppDelegate.h */,
4DAE74E2152A0F5800751094 /* RMAppDelegate.m */,
4DAE74E4152A0F5800751094 /* MainMenu.xib */,
4DAE74D7152A0F5800751094 /* RubyMotion Installer-Info.plist */,
4DAE74D8152A0F5800751094 /* InfoPlist.strings */,
4DAE74DB152A0F5800751094 /* main.m */,
4DAE74DD152A0F5800751094 /* RubyMotion Installer-Prefix.pch */,
);
path = "RubyMotion Installer";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
4DAE74CA152A0F5800751094 /* RubyMotion Installer */ = {
isa = PBXNativeTarget;
buildConfigurationList = 4DAE74E9152A0F5800751094 /* Build configuration list for PBXNativeTarget "RubyMotion Installer" */;
buildPhases = (
4DAE74C7152A0F5800751094 /* Sources */,
4DAE74C8152A0F5800751094 /* Frameworks */,
4DAE74C9152A0F5800751094 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "RubyMotion Installer";
productName = "RubyMotion Installer";
productReference = 4DAE74CB152A0F5800751094 /* RubyMotion Installer.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
4DAE74C2152A0F5800751094 /* Project object */ = {
isa = PBXProject;
attributes = {
CLASSPREFIX = RM;
LastUpgradeCheck = 0430;
};
buildConfigurationList = 4DAE74C5152A0F5800751094 /* Build configuration list for PBXProject "RubyMotion Installer" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = 4DAE74C0152A0F5800751094;
productRefGroup = 4DAE74CC152A0F5800751094 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
4DAE74CA152A0F5800751094 /* RubyMotion Installer */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
4DAE74C9152A0F5800751094 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4DAE74DA152A0F5800751094 /* InfoPlist.strings in Resources */,
4DAE74E6152A0F5800751094 /* MainMenu.xib in Resources */,
4DAE74F3152A0FFF00751094 /* eula.rtf in Resources */,
4DAE74F4152A0FFF00751094 /* icon.icns in Resources */,
4DAE74F5152A0FFF00751094 /* logo_bottom.png in Resources */,
4DAE74F6152A0FFF00751094 /* logo.png in Resources */,
4DAE74F7152A0FFF00751094 /* MainWindow.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
4DAE74C7152A0F5800751094 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
4DAE74DC152A0F5800751094 /* main.m in Sources */,
4DAE74E3152A0F5800751094 /* RMAppDelegate.m in Sources */,
4DAE74F8152A0FFF00751094 /* RMMainWindowController.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
4DAE74D8152A0F5800751094 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
4DAE74D9152A0F5800751094 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
4DAE74E4152A0F5800751094 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
4DAE74E5152A0F5800751094 /* en */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
4DAE74E7152A0F5800751094 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = NO;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
name = Debug;
};
4DAE74E8152A0F5800751094 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.7;
SDKROOT = macosx;
};
name = Release;
};
4DAE74EA152A0F5800751094 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "RubyMotion Installer/RubyMotion Installer-Prefix.pch";
INFOPLIST_FILE = "RubyMotion Installer/RubyMotion Installer-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Debug;
};
4DAE74EB152A0F5800751094 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "RubyMotion Installer/RubyMotion Installer-Prefix.pch";
INFOPLIST_FILE = "RubyMotion Installer/RubyMotion Installer-Info.plist";
MACOSX_DEPLOYMENT_TARGET = 10.6;
PRODUCT_NAME = "$(TARGET_NAME)";
WRAPPER_EXTENSION = app;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
4DAE74C5152A0F5800751094 /* Build configuration list for PBXProject "RubyMotion Installer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4DAE74E7152A0F5800751094 /* Debug */,
4DAE74E8152A0F5800751094 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
4DAE74E9152A0F5800751094 /* Build configuration list for PBXNativeTarget "RubyMotion Installer" */ = {
isa = XCConfigurationList;
buildConfigurations = (
4DAE74EA152A0F5800751094 /* Debug */,
4DAE74EB152A0F5800751094 /* Release */,
);
defaultConfigurationIsVisible = 0;
};
/* End XCConfigurationList section */
};
rootObject = 4DAE74C2152A0F5800751094 /* Project object */;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:RubyMotion Installer.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4DAE74CA152A0F5800751094"
BuildableName = "RubyMotion Installer.app"
BlueprintName = "RubyMotion Installer"
ReferencedContainer = "container:RubyMotion Installer.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
<Testables>
</Testables>
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4DAE74CA152A0F5800751094"
BuildableName = "RubyMotion Installer.app"
BlueprintName = "RubyMotion Installer"
ReferencedContainer = "container:RubyMotion Installer.xcodeproj">
</BuildableReference>
</MacroExpansion>
</TestAction>
<LaunchAction
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
allowLocationSimulation = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4DAE74CA152A0F5800751094"
BuildableName = "RubyMotion Installer.app"
BlueprintName = "RubyMotion Installer"
ReferencedContainer = "container:RubyMotion Installer.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<BuildableProductRunnable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "4DAE74CA152A0F5800751094"
BuildableName = "RubyMotion Installer.app"
BlueprintName = "RubyMotion Installer"
ReferencedContainer = "container:RubyMotion Installer.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>RubyMotion Installer.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>4DAE74CA152A0F5800751094</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
//
// RMAppDelegate.h
// RubyMotion Installer
//
// Created by lrz on 3/31/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface RMAppDelegate : NSObject <NSApplicationDelegate>
@property (assign) IBOutlet NSWindow *window;
@end

View File

@@ -0,0 +1,26 @@
//
// RMAppDelegate.m
// RubyMotion Installer
//
// Created by lrz on 3/31/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "RMAppDelegate.h"
#import "RMMainWindowController.h"
@implementation RMAppDelegate
@synthesize window = _window;
- (void)dealloc
{
[super dealloc];
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[RMMainWindowController open];
}
@end

View File

@@ -0,0 +1,36 @@
//
// RMMainWindowController.h
// RubyMotion Installer
//
// Created by lrz on 3/31/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface RMMainWindowController : NSWindowController <NSURLDownloadDelegate>
{
IBOutlet NSView *view1, *view2, *view3, *view4, *view5;
IBOutlet NSTextView *licenseTextView;
IBOutlet NSTextField *licenseKeyTextField;
IBOutlet NSTextField *licenseKeyDescriptiveLabel;
IBOutlet NSProgressIndicator *installProgressIndicator;
IBOutlet NSTextField *installProgressStatusLabel;
IBOutlet NSButton *openGettingStartedGuideButton;
NSString *licenseKey;
int currentStep;
NSURL *downloadURL;
long long expectedDownloadLength;
long long downloadDataReceived;
NSString *installerPath;
bool softwareInstalled;
NSURLDownload *download;
}
+ (id)open;
- (IBAction)contactSupport:(id)sender;
- (IBAction)quitStep:(id)sender;
- (IBAction)nextStep:(id)sender;
@end

View File

@@ -0,0 +1,348 @@
//
// RMMainWindowController.m
// RubyMotion Installer
//
// Created by lrz on 3/31/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import "RMMainWindowController.h"
@implementation RMMainWindowController
+ (id)open
{
RMMainWindowController *controller = [[RMMainWindowController alloc] initWithWindowNibName:@"MainWindow"];
[controller window];
return controller;
}
- (void)windowDidLoad
{
[super windowDidLoad];
currentStep = 1;
softwareInstalled = false;
}
- (NSView *)viewForStep:(int)step
{
switch (step) {
case 1:
return view1;
case 2:
return view2;
case 3:
return view3;
case 4:
return view4;
case 5:
return view5;
}
return nil;
}
- (void)contactSupport:(id)sender
{
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"mailto:info@hipbyte.com"]];
}
- (void)quitStep:(id)sender
{
if (currentStep == 5) {
if ([openGettingStartedGuideButton state] == NSOnState) {
[[NSWorkspace sharedWorkspace] openURL:[NSURL fileURLWithPath:@"/Library/Motion/doc/Getting Started.html"]];
}
}
[[NSApplication sharedApplication] terminate:sender];
}
static int numberOfShakes = 3;
static float durationOfShake = 0.5f;
static float vigourOfShake = 0.02f;
- (CAKeyframeAnimation *)shakeAnimation:(NSRect)frame
{
CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animation];
CGMutablePathRef shakePath = CGPathCreateMutable();
CGPathMoveToPoint(shakePath, NULL, NSMinX(frame), NSMinY(frame));
int index;
for (index = 0; index < numberOfShakes; ++index)
{
CGPathAddLineToPoint(shakePath, NULL, NSMinX(frame) - frame.size.width * vigourOfShake, NSMinY(frame));
CGPathAddLineToPoint(shakePath, NULL, NSMinX(frame) + frame.size.width * vigourOfShake, NSMinY(frame));
}
CGPathCloseSubpath(shakePath);
shakeAnimation.path = shakePath;
shakeAnimation.duration = durationOfShake;
return shakeAnimation;
}
- (void)shakeWindow
{
[[self window] setAnimations:[NSDictionary dictionaryWithObject:[self shakeAnimation:[[self window] frame]] forKey:@"frameOrigin"]];
[[[self window] animator] setFrameOrigin:[[self window] frame].origin];
}
- (void)licenseKeyInvalid
{
static int failures = 0;
failures++;
if (failures >= 3) {
[licenseKeyDescriptiveLabel setTextColor:[NSColor redColor]];
}
[self shakeWindow];
}
static int
sudoCommand(const char *myToolPath, char **myArguments)
{
OSStatus myStatus;
AuthorizationFlags myFlags = kAuthorizationFlagDefaults;
AuthorizationRef myAuthorizationRef = 0;
if (myAuthorizationRef == 0) {
myStatus = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, myFlags, &myAuthorizationRef);
if (myStatus != errAuthorizationSuccess) {
goto DoneWorking;
}
}
AuthorizationItem myItems = {kAuthorizationRightExecute, 0, NULL, 0};
AuthorizationRights myRights = {1, &myItems};
myFlags = kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights;
myStatus = AuthorizationCopyRights (myAuthorizationRef, &myRights, NULL, myFlags, NULL );
if (myStatus != errAuthorizationSuccess) {
goto DoneWorking;
}
FILE *myCommunicationsPipe = NULL;
char myReadBuffer[128];
myFlags = kAuthorizationFlagDefaults;
myStatus = AuthorizationExecuteWithPrivileges(myAuthorizationRef, myToolPath, myFlags, (char **)myArguments, &myCommunicationsPipe);
if (myStatus == errAuthorizationSuccess) {
while (true) {
int bytesRead = read (fileno (myCommunicationsPipe), myReadBuffer, sizeof (myReadBuffer));
if (bytesRead < 1) {
goto DoneWorking;
}
write (fileno (stdout), myReadBuffer, bytesRead);
}
}
DoneWorking:
if (myAuthorizationRef != 0) {
AuthorizationFree (myAuthorizationRef, kAuthorizationFlagDefaults);
}
return myStatus;
}
#include <sys/types.h>
#include <sys/stat.h>
- (void)installPackage
{
assert(installerPath != nil);
[installProgressStatusLabel setStringValue:@"Installing files..."];
NSString *installerExecPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"installer.sh"];
[@"#!/bin/sh\n\n/usr/sbin/installer -pkg $1 -target / \n/bin/echo $2 > /Library/Motion/license.key \n" writeToFile:installerExecPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
chmod([installerExecPath fileSystemRepresentation], S_IXUSR | S_IXGRP | S_IXOTH);
char *install_args[] = { (char *)[installerPath fileSystemRepresentation], (char *)[licenseKey UTF8String], NULL };
int err = sudoCommand([installerExecPath fileSystemRepresentation], install_args);
if (err != 0) {
[[NSAlert alertWithMessageText:@"Installer Error" defaultButton:@"Quit" alternateButton:@"" otherButton:@"" informativeTextWithFormat:@"An error (%d) happened when installing the software on your system. Please launch the installer application again and contact support if the problem still persists.", err] runModal];
[[NSApplication sharedApplication] terminate:nil];
}
softwareInstalled = true;
[self nextStep:nil];
}
- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response
{
[installProgressStatusLabel setStringValue:@"Downloading product..."];
expectedDownloadLength = [response expectedContentLength];
}
- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(NSUInteger)length
{
downloadDataReceived += length;
[installProgressIndicator setIndeterminate:NO];
[installProgressIndicator setDoubleValue:((100.0 / expectedDownloadLength) * downloadDataReceived)];
}
- (void)downloadDidFinish:(NSURLDownload *)download
{
[self installPackage];
}
- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error
{
[[NSAlert alertWithError:error] runModal];
}
- (void)nextStep:(id)sender
{
if (currentStep == 3 && licenseKey == nil) {
NSString *givenLicenseKey = [licenseKeyTextField stringValue];
givenLicenseKey = [givenLicenseKey stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
bool licenseKeyValid = true;
if ([givenLicenseKey length] == 40) {
for (int i = 0, count = [givenLicenseKey length]; i < count; i++) {
UniChar c = [givenLicenseKey characterAtIndex:i];
c = tolower(c);
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f'))) {
licenseKeyValid = false;
break;
}
}
}
else {
licenseKeyValid = false;
}
if (!licenseKeyValid) {
[self licenseKeyInvalid];
return;
}
NSString *post = [NSString stringWithFormat:@"product=rubymotion&current_software_version=0.1&license_key=%@", givenLicenseKey];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"https://secure.rubymotion.com/update_software"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
[sender setEnabled:NO];
[licenseKeyTextField setEnabled:NO];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *resp, NSData *data, NSError *error) {
[sender setEnabled:YES];
[licenseKeyTextField setEnabled:YES];
NSString *error_msg = nil;
if (error != nil) {
error_msg = [error localizedDescription];
}
else {
NSString *response_string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (response_string == nil) {
error_msg = @"Server response not properly encoded.";
}
else if ([response_string hasPrefix:@"http"]) {
[downloadURL release];
downloadURL = [NSURL URLWithString:response_string];
if (downloadURL == nil) {
error_msg = @"Server sent an incorrect download URL";
}
else {
[downloadURL retain];
[licenseKey release];
licenseKey = [givenLicenseKey copy];
[self nextStep:sender];
}
}
else {
error_msg = response_string;
}
}
if (error_msg != nil) {
[[NSAlert alertWithMessageText:@"License Key Validation Error" defaultButton:@"Okay" alternateButton:@"" otherButton:@"" informativeTextWithFormat:error_msg] runModal];
[self licenseKeyInvalid];
}
}];
return;
}
if (currentStep == 4 && !softwareInstalled) {
assert(downloadURL != nil);
NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
if (download != nil) {
[download cancel];
[download release];
}
[installerPath release];
installerPath = [[NSTemporaryDirectory() stringByAppendingPathComponent:@"rubymotion.pkg"] copy];
[[NSFileManager defaultManager] removeItemAtPath:installerPath error:nil];
expectedDownloadLength = 0;
downloadDataReceived = 0;
download = [[NSURLDownload alloc] initWithRequest:request delegate:self];
[download setDestination:installerPath allowOverwrite:YES];
return;
}
NSView *oldView = [self viewForStep:currentStep];
NSView *newView = [self viewForStep:currentStep+1];
if (oldView == nil || newView == nil) {
return;
}
currentStep++;
NSRect oldFrame = [oldView frame];
NSRect newFrame = [newView frame];
if (newFrame.size.height != oldFrame.size.height) {
float delta = newFrame.size.height - oldFrame.size.height;
NSRect windowFrame = [[self window] frame];
windowFrame.origin.y -= (delta / 2.0);
windowFrame.size.height += delta;
[[self window] setFrame:windowFrame display:YES animate:YES];
newFrame.origin = oldFrame.origin;
newFrame.size.width = oldFrame.size.width;
}
[newView setFrame:newFrame];
[[[oldView superview] animator] replaceSubview:oldView with:newView];
switch (currentStep) {
case 1:
break;
case 2:
if (true) {
NSString *licensePath = [[NSBundle mainBundle] pathForResource:@"eula" ofType:@"rtf"];
assert(licensePath != nil);
NSData *data = [NSData dataWithContentsOfFile:licensePath];
NSAttributedString *licenseString = [[[NSAttributedString alloc] initWithRTF:data documentAttributes: NULL] autorelease];
[[licenseTextView textStorage] setAttributedString:licenseString];
}
break;
case 3:
break;
case 4:
[installProgressIndicator startAnimation:nil];
[installProgressStatusLabel setStringValue:@"Initializing..."];
[self performSelector:@selector(nextStep:) withObject:nil afterDelay:3];
break;
case 5:
break;
}
}
- (void)windowWillClose:(NSNotification *)notification
{
[[NSApplication sharedApplication] terminate:nil];
}
@end

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>${EXECUTABLE_NAME}</string>
<key>CFBundleIconFile</key>
<string>icon.icns</string>
<key>CFBundleIdentifier</key>
<string>com.hipbyte.${PRODUCT_NAME:rfc1034identifier}</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>LSMinimumSystemVersion</key>
<string>${MACOSX_DEPLOYMENT_TARGET}</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2012 HipByte SPRL. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View File

@@ -0,0 +1,8 @@
//
// Prefix header for all source files of the 'RubyMotion Installer' target in the 'RubyMotion Installer' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#import <QuartzCore/QuartzCore.h>
#endif

View File

@@ -0,0 +1,2 @@
/* Localized versions of Info.plist keys */

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,439 @@
{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf320
{\fonttbl\f0\fswiss\fcharset0 ArialMT;}
{\colortbl;\red255\green255\blue255;\red0\green0\blue255;}
{\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid1\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid2\'02\'01.;}{\levelnumbers\'01;}\fi-360\li1440\lin1440 }{\listname ;}\listid1}
{\list\listtemplateid2\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid101\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid102\'02\'01.;}{\levelnumbers\'01;}\fi-360\li1440\lin1440 }{\listname ;}\listid2}
{\list\listtemplateid3\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid201\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid202\'02\'01.;}{\levelnumbers\'01;}\fi-360\li1440\lin1440 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid203\'02\'02.;}{\levelnumbers\'01;}\fi-360\li2160\lin2160 }{\listname ;}\listid3}
{\list\listtemplateid4\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid301\'02\'00.;}{\levelnumbers\'01;}\fi-360\li720\lin720 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{decimal\}.}{\leveltext\leveltemplateid302\'02\'01.;}{\levelnumbers\'01;}\fi-360\li1440\lin1440 }{\listname ;}\listid4}}
{\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}{\listoverride\listid2\listoverridecount0\ls2}{\listoverride\listid3\listoverridecount0\ls3}{\listoverride\listid4\listoverridecount0\ls4}}
{\info
{\author Sallie}}\paperw11905\paperh16837\margl1701\margr1361\margb1361\margt1985\viewkind1
\deftab567
\pard\pardeftab567\ri-6962\sl290\slmult1\sb120\sa600
\f0\b\fs30 \cf0 RubyMotion End User License Agreement\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\b0\fs22 \cf0 This End User License Agreement governs the relationship with respect to the software \'93RubyMotion\'94 (further identified below and designated as \'93
\b the Software
\b0 \'94) between
\b HipByte SPRL
\b0 , a company incorporated under the laws of Belgium with its registered address Rue de la renaissance 49, B-4451 Voroux-Lez-Liers, Belgium, Tax number VAT BE 0841.155.195 (Hereafter designated as \'93
\b HipByte
\b0 \'94 or \'93
\b the Licensor
\b0 \'94) and the person, company or organization which purchases the Software (Hereafter designated as \'93
\b the End User
\b0 \'94), the details of which having been communicated to the Licensor by the End User in the Order Form during the purchase process. Each party shall be referred to as \'93a Party\'94, both parties may be referred to as \'93the Parties\'94.\
By using the Software, the End User irrevocably accepts to be solely bound by the present End User License Agreement, all other terms and conditions, including the End User\'92s general conditions (whatever the name thereof), being expressly excluded.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls1\ilvl0
\b\fs23 \cf0 1
\fs24 Definitions\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls1\ilvl1
\fs22 \cf0 1.1 Agreement
\b0 means this End User License Agreement completed by the Order Form.
\b \
1.2 Application
\b0 means any software application for mobile phones developed by the End User with the Software.\
\ls1\ilvl1
\b 1.3 Apple
\b0 means Apple, Inc., any parent or linked company or any successor thereof which operates the Platform. \
\ls1\ilvl1
\b 1.4 Documentation
\b0 means the program specifications, user guides and/or other general information and guidelines about the Software and its use that are made available by the Licensor or provided by the Licensor to the End Users.
\b \
1.5 Effective Date
\b0 means of the date of purchase of the Software by the End User.
\b \
1.6 Force Majeure
\b0 means any cause preventing a Party from performing any or all of its obligations which arises from or is attributable to acts, events, omissions or accidents beyond the reasonable control of the Party so prevented including without limitation strikes, lock-outs or other industrial disputes (whether involving the workforce of the party so prevented or of any other party), act of God, war, riot, civil commotion, act of terrorism, malicious damage, compliance with any law or governmental order, rule, regulation or direction, accident, breakdown of plant or machinery, fire, flood or storm.\
\ls1\ilvl1
\b 1.7 Intellectual Property
\b0 includes all rights concerning intellectual property anywhere in the world whether or not registered and including applications for registration of any of them, including but not limited to copyright, patents, trade marks, design right, database rights, topography rights, know how, and other similar rights.\
\ls1\ilvl1
\b 1.8 Order Form
\b0 means the form filled by the End User on the Licensor\'92s website during the purchase process and providing the details of the End User and the options chosen by the End User for this Agreement.
\b \
1.9 Platform
\b0 means a website or a service where applications for Apple\'92s mobile phones are made available for download (such platform being currently called \'93iTunes Store\'94).
\b \
1.10 Software
\b0 means the development tool for mobile applications \'93RubyMotion\'94 (or any evolution of successor thereof) licensed under this Agreement, and more precisely described in the Documentation.
\b \
1.11 \'93Update\'94 means:\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\b0 \cf0 subsequent releases of the Software that the Licensor makes generally available to its customers who currently receive its software maintenance services (or equivalent services), and that:\
add new or modified features, functionality or improved performance,\
operate on new or other databases, operating systems, or client or server platforms, or\
add new language capabilities; and\
\'93bug\'94 or \'93error\'94 \'93fixes\'94 \'93patches\'94 \'93workarounds\'94 and maintenance releases;\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 2
\fs24 Software License\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 2.1
\b0 The Licensor grants the End User a non-exclusive, non-transferable, and perpetual licence to use the Software for strictly internal purposes within the terms of this Agreement.\
\ls2\ilvl1
\b 2.2
\b0 The license granted is limited to the personal use of the End User. If the End User is not an individual, this license only allows the use of the Software by one member of the End User\'92s personnel or organisation at a time. Distinct licenses must be purchased by the End User for each additional concurrent user. Such right of use shall not be extended to the members of the personnel of any third party, including those of parent companies of the End User or other companies or organisations linked to the End User. \
\ls2\ilvl1
\b 2.3
\b0 The End User may install and use a reasonable number of copies of the Software in object code on the End User\'92s hardware, provided that the number of such copies shall not exceed what is necessary for exercising the right of personal use granted under this Agreement. The End User is not allowed to install, make or keep other copies of the Software.\
\ls2\ilvl1
\b 2.4
\b0 The End User may not develop, translate, decompile, reverse-engineer or otherwise modify the Software. The End User shall not have access to the source code of the Software, unless certain parts of the Software which may be covered by an open source license, in which case the source code thereof shall be made available separately. \
\ls2\ilvl1
\b 2.5
\b0 The End User shall use the Software pursuant to the Documentation and to any instruction of use provided by the Licensor. The End User shall use the Software in good faith and restrain form any illegal, offensive or harmful use of the Software. \
\ls2\ilvl1
\b 2.6
\b0 The End User may not sub-license all or part of its rights and shall not provide the Software or grant access thereto to any third party, unless permitted under this Agreement. The End User\'92s employees shall not be entitled to any rights for personal purposes.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 3
\fs24 Technical protection means\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 3.1
\b0 The Licensor reserves the right to protect the Software against unauthorised uses with technical protection means such as activation keys or temporary passwords. The Licensor may use such technical protection means at distance to enforce its rights, including temporary or permanent de-activation of the Software and/or the access to the Software.\
\ls2\ilvl1
\b 3.2
\b0 The End User may not circumvent or de-activate the technical protection means or try to do so.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 4
\fs24 Maintenance and support Services\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 4.1
\b0 During the maintenance term, the Licensor shall provide Updates to the Licensor from time to time, as such Updates are made generally available to the Licensor\'92s customers.\
\ls2\ilvl1
\b 4.2
\b0 If the Licensor is made aware of errors or bugs affecting the Software by the End User (or by other end users), the Licensor shall make reasonable efforts to provide an Update correcting or circumventing such errors or bugs in the best timescales, with regards to the severity and the complexity of such error.\
\ls2\ilvl1
\b 4.3
\b0 The End User may submit support requests to the Licensor concerning bugs or errors, questions or help about the Software, suggestions of future evolutions or improved functionalities, etc. Such support services shall be provided Monday to Friday, during normal office hours in the Licensor\'92s time zone. The Licensor shall make its best efforts to provide helpful response but does not take any commitment regarding the response times.\
\ls2\ilvl1
\b 4.4
\b0 In case of support requests from the End User regarding new or customized developments on the Software, the Licensor shall, at its own choice and without justification, either (i) refuse to implement such request, (ii) implement such request as a general improvement of the Software which shall be released as an Update according to the present section, or (iii) make a proposal to the End User to develop and implement such request specifically for the End User; in this case, such additional services shall be charged to the End User and shall take place under a separate agreement. \
\ls2\ilvl1
\b 4.5
\b0 The Licensor shall provide the maintenance and support services during one year after the Effective Date (the initial term) and shall be tacitly extended for successive annual maintenance terms unless the End User gives the Licensor notice of its intent to terminate the maintenance services at least thirty (30) days before the end of a maintenance term.\
\ls2\ilvl1
\b 4.6
\b0 Unless provided otherwise, the End User is responsible for the installation of the Updates provided by the Licensor. \
\ls2\ilvl1
\b 4.7
\b0 The End User may choose not to install an Update provided by the Licensor at its own risks and under its sole responsibility. In such case, the Licensor shall have no further obligation to correct any errors affecting the Software and shall not be liable of any damage suffered by the End User in connection with its use of the Software, from the moment the Licensor makes available an Update that the End User refuses to install.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 5
\fs24 Additional services\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 5.1
\b0 Apart from the maintenance and support services described in this Agreement, the Licensor shall not provide any additional service under this Agreement. Performance of additional services by the Licensor shall be under a separate service agreement. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 6
\fs24 Financial provisions\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 6.1
\b0 In consideration of the rights and services granted under this Agreement, the End User shall pay to the Licensor the fees specified in the Order Form. \
\ls2\ilvl1
\b 6.2
\b0 The Licensor reserves the right to modify the applicable recurrent fees, based on Licensor\'92s list of recommended retail prices. The modified prices shall be applicable to all such recurrent fees that are due by the Licensor after the entry into force of the modified recommended retail price. \
\ls2\ilvl1
\b 6.3
\b0 All fees are to be paid upfront at the beginning of each relevant period. The End User shall pay any amount in respect of applicable taxes, including without limitation value added tax, on such sum. \
\ls2\ilvl1
\b 6.4
\b0 Except where provided otherwise, all payments shall be made by electronic means through the Licensor\'92s website. All payments shall be processed by the third party company FASTSPRING ({\field{\*\fldinst{HYPERLINK "http://www.fastspring.com"}}{\fldrslt \cf2 \ul \ulc2 www.fastspring.com}}) or any other replacing payment services provider of the Licensor\'92s choice. The Licensor has no control on the payment process and disclaims all liability in this regard. \
\ls2\ilvl1
\b 6.5
\b0 Unless provided otherwise in the Order Form, all sums due under this Agreement shall be paid in US Dollars (USD). The End User shall bear the exchange rate risk in its entirety.\
\ls2\ilvl1
\b 6.6
\b0 The Licensor shall have the right, in case of delayed payment of any sums due to the Licensor by the End User, to charge, without notice, (i) a penalty of 10% of the amount of the invoice and (ii) late interest at the rate of 10% per year, calculated per day of delay.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls2\ilvl1
\b\fs23 \cf0 7
\fs24 Warranties\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls2\ilvl1
\fs22 \cf0 7.1
\b0 The Licensor shall provide the Software with professional skill and care and perform this Agreement with a general \'93best efforts\'94 obligation (\'93
\i obligation de moyen / middelverbintenis
\i0 \'94).\
\ls2\ilvl1
\b 7.2
\b0 Except for specific warranties provided in this section of the Agreement, the Software is provided to the End User \'93as is\'94, without expressed or implied warranties of any king concerning e.g. the performance, good or uninterrupted functioning, absence of errors or fitness for purpose. The Licensor does not warrant that the Software will meet the requirements or expectations of the End User.\
\ls2\ilvl1
\b 7.3
\b0 The Licensor warrants to the End User that it has the authority and power to grant the rights granted under this Agreement. The Licensor has no reason to believe that the use of the Software could infringe any third party\'92s Intellectual Property Rights, and is not aware of any claim alleging that such infringement exists.\
\ls2\ilvl1
\b 7.4
\b0 The Licensor warrants that it is not aware, on the Effective Date, of any claims from a third party alleging that the Software infringes one or more patent(s) of any third party. The Licensor does however not warrant that the Software do not and shall not infringe any patent of any third party.\
\ls2\ilvl1
\b 7.5
\b0 If the Software infringe any third party\'92s Intellectual Property Rights, the Licensor will, at its own discretion : \
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\cf0 Procure from such third party the right for the End User to continue using the Software, or\
Modify or replace the infringing Software by a non-infringing, functionally equivalent solution, or\
Immediately terminate this Agreement and reimburse the license fees paid by the End User for the concerned infringing Software, \
provided that such remedies shall exclude any other remedy or compensation for the damages suffered by the End User.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\b \cf0 7.6
\b0 The Licensor disclaims all liability regarding errors or bugs affecting the Software if the End User has not subscribed to the maintenance services or if the maintenance term subscribed by the End User has expired and has not been extended. In this case, the Licensor shall have no obligation to correct the Software. \
\ls3\ilvl1
\b 7.7
\b0 This Agreement does not affect the End User\'92s statutory rights where such statutory rights may not be waived.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 8
\fs24 Intellectual Property\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 8.1
\b0 The End User acknowledges that the Intellectual Property Rights in and to the Software and any trademarks or service marks relating thereto remain the property of the Licensor and its suppliers.\
\ls3\ilvl1
\b 8.2
\b0 The Parties shall co-operate to prevent, stop and avoid occurrence of any unauthorised use of the Software, or any reproduction or modification thereof. \
\ls3\ilvl1
\b 8.3
\b0 The End User shall inform the Licensor promptly of any infringement or misuse of the Licensor\'92s Intellectual Property Rights, which comes to its knowledge.\
\ls3\ilvl1
\b 8.4
\b0 The End User shall take all necessary and appropriate technical, contractual or other measures, to prevent the unauthorised use or any other infringement of Intellectual Property Rights of the Licensor.\
\ls3\ilvl1
\b 8.5
\b0 If the End User does not inform the Licensor of infringement or misuse coming to its knowledge or take all necessary measures to stop or prevent the infringements mentioned above or such infringement does not cease despite the measures taken, the Licensor shall have a right to terminate this Agreement on the basis of the material breach on the part of the End User and may choose to pursue such infringements on its own behalf.\
\ls3\ilvl1
\b 8.6
\b0 The Licensor reserves the right to audit or have a third party audit the due respect by the End User of the provisions of the Agreement. The End User shall duly cooperate in such audit inspections.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 9
\fs24 Applications developed by the End User\
\pard\pardeftab567\ri-6962\sl280\sb120\sa120\qj
\ls3\ilvl1
\fs22 \cf0 9.1
\b0 The End User shall own any Intellectual Property Rights on its original contributions incorporated in the Applications, provided that such ownership shall not extend to any Intellectual Property Rights of the Licensor incorporated in the Applications.\
\ls3\ilvl1
\b 9.2
\b0 The End User knows that the distribution of the Applications on the Platform is subject to the consent of Apple and that the Licensor has no control on such consent. The End User shall bear full responsibility for the compliance of the Applications with Apple\'92s directives and guidelines regarding the publication of Applications on the Platform. The Licensor does not warrant that the Applications shall be published on the Platform. \
\ls3\ilvl1
\b 9.3
\b0 The End User shall be registered as a developer in the Apple Developer Program (whatever the name thereof) and bear the costs of obtaining and maintaining such registration. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 10
\fs24 Liability\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 10.1
\b0 Neither of the Parties shall be liable for financial or economic losses, loss of anticipated profits or savings, loss of business, loss of data, loss of image or any other indirect or consequential damage. The Licensor shall not be liable for any damage arising out of reliance upon, use or inability to use the Software.\
\ls3\ilvl1
\b 10.2
\b0 The Licensor shall not be liable for any harm that may be caused by the transmission of a computer virus, worm or other such computer program.\
\ls3\ilvl1
\b 10.3
\b0 The End User shall be liable for all unauthorised use of the Software by any third party, unless it has taken all necessary measures to prevent such use in accordance with the terms of this Agreement.\
\ls3\ilvl1
\b 10.4
\b0 The End User shall be solely liable for its use of the Software and for the Applications. The End User shall hold the Licensor harmless for any claim or action brought by third parties relating to the use of the Software made by the End User and/or relating to the Applications.\
\ls3\ilvl1
\b 10.5
\b0 Nothing in this Agreement shall have the effect of excluding or limiting the liability of either party for:\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\ls3\ilvl2
\b\fs19 \cf0 10.5.1
\b0\fs22 death or personal injury to the extent it results from negligence, or that of either party\'92s employees or agents in the course of their engagement hereunder; \
\ls3\ilvl2
\b\fs19 10.5.2
\b0\fs22 intentional negligence or fraud; or\
\ls3\ilvl2
\b\fs19 10.5.3
\b0\fs22 infringement of the Intellectual Property Rights of the Licensor.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\b \cf0 10.6
\b0 The total aggregate liability of the Licensor for any cause arising under or related to this Agreement shall be in any case limited to the total amount of the license fees for the Software paid by the End User under this Agreement. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 11
\fs24 Term and Termination\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 11.1
\b0 This Agreement shall enter into force on the Effective Date and for an unlimited duration, unless it is terminated according to the present section.\
\ls3\ilvl1
\b 11.2
\b0 However, the maintenance and support services shall be provided for the term specified in the Order From. If case of silence of the Order Form, the term shall be of one year. The End User may extend the maintenance and support services by completing a new Order Form and purchasing a new End User license on the Licensor\'92s website, which shall renew the Agreement \
\ls3\ilvl1
\b 11.3
\b0 At the expiration of the maintenance and support services without renewal by the End User, the End User may continue using the Software, in accordance with all conditions and restrictions set out in this Agreement, at its own risks and under its sole responsibility. In such case, the Licensor shall have no further obligation to correct any errors affecting the Software and shall not be liable of any damage suffered by the End User in connection with its use of the Software. The Software shall in such case be deemed provided \'93as is\'94, without any warranty of any kind, all warranties set out in this Agreement being expressly waived from the moment of the expiration of the maintenance and support services. \
\ls3\ilvl1
\b 11.4
\b0 This Agreement and all licenses hereby granted on the Software may be terminated by the Licensor with immediate effect if the End User:\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\ls3\ilvl2
\b\fs19 \cf0 11.4.1
\b0\fs22 breaches or fails to comply with any provisions of this Agreement, such breach being incapable of remedy or not remedied within 15 days after the breach notification by the Licensor; or\
\ls3\ilvl2
\b\fs19 11.4.2
\b0\fs22 breaches the Intellectual Property Rights of the Licensor ; or\
\ls3\ilvl2
\b\fs19 11.4.3
\b0\fs22 is made bankrupt; or\
\ls3\ilvl2
\b\fs19 11.4.4
\b0\fs22 enters into liquidation or/any arrangement with its creditors; or\
\ls3\ilvl2
\b\fs19 11.4.5
\b0\fs22 has a receiver or administrator appointed with respect to any of their assets. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl2
\b\fs23 \cf0 12
\fs24 Effects of Termination\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 12.1
\b0 After the termination of this Agreement, the End User shall cease using the Software immediately.\
\ls3\ilvl1
\b 12.2
\b0 Immediately upon termination of this Licence Agreement the End User shall either:\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\ls3\ilvl2
\b\fs19 \cf0 12.2.1
\b0\fs22 destroy or delete the copies of the Software from all storage media in its possession; or \
\ls3\ilvl2
\b\fs19 12.2.2
\b0\fs22 voluntarily return the Software to the Licensor.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\b \cf0 12.3
\b0 All intellectual property, warranty and liability provisions of this Agreement shall survive its termination.\
\ls3\ilvl1
\b 12.4
\b0 Termination of this Agreement shall not prejudice the rights accrued and remedies of the Parties.\
\ls3\ilvl1
\b 12.5
\b0 Immediately upon termination of this Agreement all outstanding fees, expenses and other financial obligations arising from this Agreement, accrued to the date of termination, shall become due and payable. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 13
\fs24 Confidentiality\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 13.1
\b0 Each Party undertakes to keep confidential and not to disclose to any third party or to use themselves other than for the purposes permitted under or in accordance with this Agreement any Confidential Information in any form disclosed by the one and received by the other pursuant to or in the course of this Agreement, including without limitation any confidential technology and Intellectual Property of the other.\
\ls3\ilvl1
\b 13.2
\b0 Each of the parties undertakes to disclose Confidential Information of the other only to those of its officers, employees, agents and contractors, to whom and to the extent to which, such disclosure is necessary for the purposes contemplated under this Agreement and to ensure that all such personnel enter into and observe the terms of an individual confidentiality undertaking.\
\ls3\ilvl1
\b 13.3
\b0 The obligations contained in this Clause shall not apply to any Confidential Information which:\
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\ls3\ilvl2
\b\fs19 \cf0 13.3.1
\b0\fs22 is publicly known at the time of disclosure to the receiving party;\
\ls3\ilvl2
\b\fs19 13.3.2
\b0\fs22 after disclosure becomes publicly known otherwise than through a breach of this Agreement by the receiving party, its officers, employees, agents or contractors;\
\ls3\ilvl2
\b\fs19 13.3.3
\b0\fs22 can be proved by the receiving party to have reached its hands otherwise than by being communicated by the other party including being known to it prior to disclosure, or having been developed by or for it wholly independently of the other party or having been obtained from a third party without any restriction on disclosure on such third party of which the recipient is aware, having made due enquiry; and\
\ls3\ilvl2
\b\fs19 13.3.4
\b0\fs22 is required by law, regulation or order of a competent authority (including any regulatory or governmental body or securities exchange) to be disclosed by the receiving party, provided that, where practicable, the disclosing party is given reasonable advance notice of the intended disclosure.
\i\b \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls3\ilvl2
\i0\fs23 \cf0 14
\fs24 Force majeure\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls3\ilvl1
\fs22 \cf0 14.1
\b0 No Party shall be liable for failures or have the right to terminate this Agreement for any delay or failure in performance under this Agreement if such delay or failure is caused by force majeure.\
\ls3\ilvl1
\b 14.2
\b0 The non-performing Party under this section shall inform the other Party in writing as soon as is practicable about the force majeure circumstances specifying the nature and extent of the circumstances giving rise to force majeure.\
\ls3\ilvl1
\b 14.3
\b0 The Party claiming to be prevented or delayed in the performance of any of its obligations under this Agreement by reason of force majeure shall take all steps as are necessary and use reasonable endeavours to bring the force majeure event to a close or to find a solution by which the Agreement may be performed despite the continuance of the force majeure event.\
\ls3\ilvl1
\b 14.4
\b0 If the non-performance due to force majeure is longer than 1 (one) month or could be reasonably expected to be longer than one month, any Party shall have a right to terminate this Agreement by written notice to the other Party, in which case none of the Parties shall have any liability to the other except that rights and liabilities which accrued prior to such termination shall continue to subsist.\
\ls3\ilvl1
\b 14.5
\b0 In this Agreement, "force majeure" shall mean any cause preventing a party from performing any or all of its obligations which arises from or is attributable to acts, events, omissions or accidents beyond the reasonable control of the party so prevented including without limitation strikes, lock-outs or other industrial disputes (whether involving the workforce of the party so prevented or of any other party), act of God, war, riot, civil commotion, act of terrorism, malicious damage, compliance with any law or governmental order, rule, regulation or direction, accident, breakdown of plant or machinery, fire, flood or storm.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb480\sa140\qj
\ls3\ilvl1
\b\fs23 \cf0 15
\fs24 Privacy and data protection\
\pard\pardeftab567\ri-6962\sl280\sb120\sa120\qj
\ls3\ilvl1
\fs22 \cf0 15.1
\b0 The Licensor may process personal data concerning the End User (or certain members of its personnel), which are collected and processed for the following purposes : \
\pard\pardeftab567\ri-6962\sl290\slmult1\sa140\qj
\cf0 The details of the End User provided in the Order Form and any further exchange of information between the Parties are collected and processed by the Licensor in order to perform its rights and obligations under this Agreement and to provide information to the End User regarding the Licensor\'92s products and services, unless the End User notifies to the Licensor that it does not want to receive such information in the future ; \
The banking details of the End User are collected and processed to perform the payment operations. Such data is automatically transferred to FASTSPRING (or any other replacing payment services provider); the licensor shall not have access to this information and does not have control on it.\
The Licensor may collect certain anonymous data about the visitors of its website in order to improve the website and the services of the Licensor. Such information shall not be used in a way that allows the identification of individuals. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls4\ilvl1
\b \cf0 15.2
\b0 Within the limits of the categories of data and purposes listed here above, the End User agrees that such processing may take place outside of the European Economic Area, for instance in the United States of America. \
\ls4\ilvl1
\b 15.3
\b0 Such personal data shall be processed by the Licensor according to the Belgian and European regulation regarding privacy and protection of personal data. The End User (or any concerned individual) may request access to its personal data and deletion or rectification of incorrect or outdated information. It may also oppose to further processing of certain data if it has serious and legitimate grounds to do so.\
\ls4\ilvl1
\b 15.4
\b0 The Licensor shall take reasonable technical and organisational measures to ensure the security and the confidentiality of such processing of personal data. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb480\sa140\qj
\ls4\ilvl1
\b\fs23 \cf0 16
\fs24 Publicity \'96 references\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls4\ilvl1
\fs22 \cf0 16.1
\b0 The Licensor has the right to communicate publicly about the existence of this Agreement and to mention the name of the End User (and/or his logo) in his list of customers. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb360\sa140\qj
\ls4\ilvl1
\b\fs23 \cf0 17
\fs24 Assignment - Transfer. \
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls4\ilvl1
\fs22 \cf0 17.1
\b0 The End User may not assign or pledge its rights or obligations under this Agreement in whole or in part to any third party without the prior written consent of the Licensor. The Licensor shall be entitled to assign, transfer or novate the benefits and obligations of this Agreement to any body or nominated subcontractor or, in the event of the transfer of all or any of his activities or functions to any other entity, to the entity to which such activities or functions have been transferred. The End User expressly agrees to the assumption of the Licensor\'92s obligations under this Agreement by that entity.\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb480\sa140\qj
\ls4\ilvl1
\b\fs23 \cf0 18
\fs24 General\
\pard\pardeftab567\ri-6962\sl290\slmult1\sb240\sa140\qj
\ls4\ilvl1
\fs22 \cf0 18.1 Entire Agreement
\b0 . This Agreement contains the entire understanding of the Parties as to the subject matter hereof, and supersedes all prior or contemporaneous, agreements and understandings between the Parties with respect to the subject matter of this Agreement, except the agreement concerning negotiation and non-disclosure signed by the Parties before this Agreement, if any. All amendments to this Agreement must be in writing and signed by the Parties hereto.\
\ls4\ilvl1
\b 18.2 Waiver
\b0 . No waiver of any breach of this Agreement shall constitute a waiver of any subsequent breach of the same or any other provision of this Agreement.\
\ls4\ilvl1
\b 18.3 Severability
\b0 . If any provision of this Agreement should, for any reason, be held by a court of competent jurisdiction to be illegal, invalid or unenforceable, such provision shall be modified in such a manner so as to make this Agreement, as modified, legal and enforceable under applicable laws and the remaining provisions shall not be affected or impaired and shall remain in full force.\
\ls4\ilvl1
\b 18.4 Headings
\b0 . The numbered headings of the section, paragraphs and clauses used in this Agreement are included for convenience only and shall not be considered part of, nor effect, the interpretation of any provisions of this Agreement.\
\ls4\ilvl1
\b 18.5 Governing Law and Jurisdiction
\b0 . This Agreement shall be governed by, the laws of Belgium. For any legal disputes arising out of this Agreement, the courts of Li\'e8ge, Belgium shall have exclusive jurisdiction.\
\ls4\ilvl1
\b 18.6 Dispute resolution
\b0 . If either Party is not satisfied with the other Party\'92s performance of its obligations, a written description of the problem shall be provided to the offending part and a good faith effort to resolve the problem shall be made by both Parties before bringing any legal action. \
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

View File

@@ -0,0 +1,14 @@
//
// main.m
// RubyMotion Installer
//
// Created by lrz on 3/31/12.
// Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **)argv);
}