├── .gitignore
├── screenshots
├── app-1.png
├── app-2.png
├── app-3.png
├── icon.png
├── kr-5_8.png
├── lobby.png
├── na-5_9.png
├── nginx.png
├── server.png
├── switch.png
└── error-unspecified.png
├── Podfile
├── LoLKR
├── Images.xcassets
│ └── AppIcon.appiconset
│ │ ├── icon_128x128.png
│ │ ├── icon_16x16.png
│ │ ├── icon_256x256.png
│ │ ├── icon_32x32-1.png
│ │ ├── icon_32x32.png
│ │ ├── icon_512x512.png
│ │ ├── icon_256x256-1.png
│ │ ├── icon_32x32@2x.png
│ │ ├── icon_512x512-1.png
│ │ ├── icon_512x512@2x.png
│ │ └── Contents.json
├── ViewController.h
├── main.m
├── ConfigViewController.h
├── AppDelegate.h
├── Credits.rtf
├── ITSwitch.h
├── AppDelegate.m
├── update.sh
├── 2_download_versions.sh
├── ConfigViewController.m
├── Info.plist
├── dsa_pub.pem
├── 1_nginx.sh
├── 3_lol.sh
├── ITSwitch.m
├── ViewController.m
└── Main.xib
├── LoLKR.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── LoLKR.xccheckout
└── project.pbxproj
├── LoLKR.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── LoLKR.xccheckout
├── LoLKRTests
├── Info.plist
└── LoLKRTests.m
├── LICENSE
├── README.md
└── updates.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | xcuserdata/
2 | Podfile.lock
3 | Pods/
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/screenshots/app-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/app-1.png
--------------------------------------------------------------------------------
/screenshots/app-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/app-2.png
--------------------------------------------------------------------------------
/screenshots/app-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/app-3.png
--------------------------------------------------------------------------------
/screenshots/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/icon.png
--------------------------------------------------------------------------------
/screenshots/kr-5_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/kr-5_8.png
--------------------------------------------------------------------------------
/screenshots/lobby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/lobby.png
--------------------------------------------------------------------------------
/screenshots/na-5_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/na-5_9.png
--------------------------------------------------------------------------------
/screenshots/nginx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/nginx.png
--------------------------------------------------------------------------------
/screenshots/server.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/server.png
--------------------------------------------------------------------------------
/screenshots/switch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/switch.png
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :osx, "10.9"
2 |
3 | pod 'PromiseKit', '~> 1.5'
4 | pod 'Sparkle', '~> 1.10'
5 | pod 'HTMLReader'
--------------------------------------------------------------------------------
/screenshots/error-unspecified.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/screenshots/error-unspecified.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_128x128.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_16x16.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_256x256.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32-1.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_256x256-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_256x256-1.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_32x32@2x.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512-1.png
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mrz1277/LoLKR/HEAD/LoLKR/Images.xcassets/AppIcon.appiconset/icon_512x512@2x.png
--------------------------------------------------------------------------------
/LoLKR.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/LoLKR/ViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.h
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ViewController : NSViewController
12 |
13 | @end
14 |
15 |
--------------------------------------------------------------------------------
/LoLKR.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/LoLKR/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | int main(int argc, const char * argv[]) {
12 | return NSApplicationMain(argc, argv);
13 | }
14 |
--------------------------------------------------------------------------------
/LoLKR/ConfigViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // ConfigViewController.h
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 4/12/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface ConfigViewController : NSViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/LoLKR/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : NSObject {
12 | NSWindowController *preferencesWindowController;
13 | }
14 |
15 | @end
16 |
17 |
--------------------------------------------------------------------------------
/LoLKR/Credits.rtf:
--------------------------------------------------------------------------------
1 | {\rtf1\ansi\ansicpg949\cocoartf1347\cocoasubrtf570
2 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
3 | {\colortbl;\red255\green255\blue255;}
4 | \paperw12240\paperh15840\margl1440\margr1440\vieww9000\viewh8400\viewkind0
5 | \pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural
6 | {\field{\*\fldinst{HYPERLINK "https://github.com/mrz1277/LoLKR"}}{\fldrslt
7 | \f0\fs24 \cf0 https://github.com/mrz1277/LoLKR}}}
--------------------------------------------------------------------------------
/LoLKR/ITSwitch.h:
--------------------------------------------------------------------------------
1 | //
2 | // ITSwitch.h
3 | // ITSwitch-Demo
4 | //
5 | // Created by Ilija Tovilo on 01/02/14.
6 | // Copyright (c) 2014 Ilija Tovilo. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | /**
12 | * ITSwitch is a replica of UISwitch for Mac OS X
13 | */
14 | IB_DESIGNABLE
15 | @interface ITSwitch : NSControl
16 |
17 | /**
18 | * @property on - Gets or sets the switches state
19 | */
20 | @property (nonatomic, getter=isOn) IBInspectable BOOL on;
21 |
22 | /**
23 | * @property tintColor - Gets or sets the switches tint
24 | */
25 | @property (nonatomic, strong) IBInspectable NSColor *tintColor;
26 |
27 | @end
28 |
--------------------------------------------------------------------------------
/LoLKRTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/LoLKR/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | @implementation AppDelegate
12 |
13 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
14 | NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
15 | if (![userDefaults objectForKey:@"port1"]) {
16 | [userDefaults setObject:@"8010" forKey:@"port1"];
17 | }
18 | if (![userDefaults objectForKey:@"port2"]) {
19 | [userDefaults setObject:@"8020" forKey:@"port2"];
20 | }
21 | if (![userDefaults objectForKey:@"block_update"]) {
22 | [userDefaults setObject:@YES forKey:@"block_update"];
23 | }
24 | }
25 |
26 | - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
27 | return YES;
28 | }
29 |
30 | @end
31 |
--------------------------------------------------------------------------------
/LoLKRTests/LoLKRTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // LoLKRTests.m
3 | // LoLKRTests
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | @interface LoLKRTests : XCTestCase
13 |
14 | @end
15 |
16 | @implementation LoLKRTests
17 |
18 | - (void)setUp {
19 | [super setUp];
20 | // Put setup code here. This method is called before the invocation of each test method in the class.
21 | }
22 |
23 | - (void)tearDown {
24 | // Put teardown code here. This method is called after the invocation of each test method in the class.
25 | [super tearDown];
26 | }
27 |
28 | - (void)testExample {
29 | // This is an example of a functional test case.
30 | XCTAssert(YES, @"Pass");
31 | }
32 |
33 | - (void)testPerformanceExample {
34 | // This is an example of a performance test case.
35 | [self measureBlock:^{
36 | // Put the code you want to measure the time of here.
37 | }];
38 | }
39 |
40 | @end
41 |
--------------------------------------------------------------------------------
/LoLKR/update.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # update.sh
4 | # LoLKR
5 | #
6 | # Created by Jason Koo on 4/10/15.
7 | # Copyright (c) 2015 Jaesung Koo. All rights reserved.
8 | #
9 | # $> ./update.sh on 8010 8020 "/Application/League of Legends.app"
10 |
11 | # arguments
12 | if [ "$#" -lt 4 ]; then
13 | echo "Illegal number of parameters"
14 | exit 1
15 | fi
16 |
17 | if [ "$1" = "on" ] || [ "$1" = "off" ]; then
18 | echo ""
19 | else
20 | echo "첫번째 전달인자는 on 또는 off 입니다."
21 | exit 1
22 | fi
23 |
24 | if [ ! -d "$4" ]; then
25 | echo "롤 설치 경로를 확인해 주세요."
26 | exit 1
27 | fi
28 |
29 | #
30 | if [ "$1" = "on" ]; then
31 | sh "$5"
32 | echo "DownloadPath = /releases/Maclive
33 | DownloadURL = 127.0.0.1:$3
34 | Region = KR" > "$4/Contents/LoL/RADS/system/system.cfg"
35 | echo "업데이트를 허용 하였습니다. 롤을 다시 시작해서 업데이트를 진행하세요. 업데이트가 끝나면 다시 업데이트 방지로 변경해주세요."
36 | fi
37 |
38 | if [ "$1" = "off" ]; then
39 | echo "DownloadPath = /releases/Maclive
40 | DownloadURL = 127.0.0.1:$2
41 | Region = KR" > "$4/Contents/LoL/RADS/system/system.cfg"
42 | echo "자동 업데이트가 정상적으로 차단되었습니다. 한국 서버가 업데이트가 될때까지 이 상태로 두시면 됩니다."
43 | fi
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Jaesung Koo
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/LoLKR/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "icon_16x16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "icon_32x32.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "icon_32x32-1.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "icon_32x32@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "icon_128x128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "icon_256x256.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "icon_256x256-1.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "icon_512x512.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "icon_512x512-1.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "icon_512x512@2x.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/LoLKR.xcworkspace/xcshareddata/LoLKR.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | 3FA5B92B-5DE3-4AB0-B75A-8801D37BFA84
9 | IDESourceControlProjectName
10 | LoLKR
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
14 | https://bitbucket.org/mrz1277/lolkr.git
15 |
16 | IDESourceControlProjectPath
17 | LoLKR.xcworkspace
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
21 | ..
22 |
23 | IDESourceControlProjectURL
24 | https://bitbucket.org/mrz1277/lolkr.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
36 | IDESourceControlWCCName
37 | lolkr
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/LoLKR.xcodeproj/project.xcworkspace/xcshareddata/LoLKR.xccheckout:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDESourceControlProjectFavoriteDictionaryKey
6 |
7 | IDESourceControlProjectIdentifier
8 | 379696B1-C478-4816-BBAC-40072FFA148B
9 | IDESourceControlProjectName
10 | LoLKR
11 | IDESourceControlProjectOriginsDictionary
12 |
13 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
14 | https://bitbucket.org/mrz1277/lolkr.git
15 |
16 | IDESourceControlProjectPath
17 | LoLKR.xcodeproj
18 | IDESourceControlProjectRelativeInstallPathDictionary
19 |
20 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
21 | ../..
22 |
23 | IDESourceControlProjectURL
24 | https://bitbucket.org/mrz1277/lolkr.git
25 | IDESourceControlProjectVersion
26 | 111
27 | IDESourceControlProjectWCCIdentifier
28 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
29 | IDESourceControlProjectWCConfigurations
30 |
31 |
32 | IDESourceControlRepositoryExtensionIdentifierKey
33 | public.vcs.git
34 | IDESourceControlWCCIdentifierKey
35 | 61DD4E44FCC89B520E1A9129C3FAEB32DB92CE8D
36 | IDESourceControlWCCName
37 | lolkr
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/LoLKR/2_download_versions.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # 2_download_versions.sh
4 | # LoLKR
5 | #
6 | # Created by Jason Koo on 4/9/15.
7 | # Copyright (c) 2015 Jaesung Koo. All rights reserved.
8 | #
9 | # $> ./2_download_versions.sh
10 |
11 | # nginx home folder check
12 | if [ ! -d "/usr/local/var/www" ]; then
13 | echo "nginx 홈 폴더(/usr/local/var/www)가 존재하지 않습니다."
14 | exit 2
15 | fi
16 |
17 | # check folder structures
18 | cd /usr/local/var/www
19 | if [ ! -d "/usr/local/var/www/releases/Maclive" ]; then
20 | mkdir -p releases/Maclive && cd releases/Maclive
21 | mkdir -p projects/lol_air_client/releases
22 | mkdir -p projects/lol_air_client_config_kr/releases
23 | mkdir -p projects/lol_launcher/releases
24 | mkdir -p projects/lol_patcher/releases
25 | mkdir -p solutions/lol_game_client_sln/releases
26 | mkdir -p system
27 | fi
28 |
29 | # download files
30 | cd /usr/local/var/www/releases/Maclive
31 | BASE_URL="http://l3cdn.riotgames.com/releases/Maclive"
32 | curl -o solutions/lol_game_client_sln/releases/releaselisting_KR $BASE_URL/solutions/lol_game_client_sln/releases/releaselisting_OC1
33 | curl -o projects/lol_air_client/releases/releaselisting_KR $BASE_URL/projects/lol_air_client/releases/releaselisting_OC1
34 | curl -o projects/lol_air_client_config_kr/releases/releaselisting_KR $BASE_URL/projects/lol_air_client_config_oc1/releases/releaselisting_OC1
35 | curl -o projects/lol_launcher/releases/releaselisting_KR $BASE_URL/projects/lol_launcher/releases/releaselisting_OC1
36 | curl -o projects/lol_patcher/releases/releaselisting_KR $BASE_URL/projects/lol_patcher/releases/releaselisting_OC1
37 | curl -o system/filelist.versioninfo $BASE_URL/system/filelist.versioninfo
--------------------------------------------------------------------------------
/LoLKR/ConfigViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ConfigViewController.m
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 4/12/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import "ConfigViewController.h"
10 |
11 | @interface ConfigViewController ()
12 | @property (weak) IBOutlet NSButtonCell *nginxInstall;
13 | @property (weak) IBOutlet NSPathControl *pathControl;
14 | @property (weak) IBOutlet NSTextField *port1TextField;
15 | @property (weak) IBOutlet NSTextField *port2TextField;
16 |
17 | @end
18 |
19 | @implementation ConfigViewController
20 |
21 | - (IBAction)done:(id)sender {
22 | NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
23 |
24 | if ([self.port1TextField.stringValue length] > 0) {
25 | [userDefaults setObject:self.port1TextField.stringValue forKey:@"port1"];
26 | }
27 | if ([self.port2TextField.stringValue length] > 0) {
28 | [userDefaults setObject:self.port2TextField.stringValue forKey:@"port2"];
29 | }
30 | [userDefaults setObject:[NSString stringWithFormat:@"\"%@\"", [NSString stringWithCString:self.pathControl.URL.fileSystemRepresentation encoding:NSUTF8StringEncoding]] forKey:@"lol_path"];
31 |
32 | [[NSNotificationCenter defaultCenter] postNotificationName:@"runAllScript" object:nil userInfo:@{@"install_nginx": [NSNumber numberWithBool:(self.nginxInstall.state != 0)]}];
33 |
34 | [self closeSheet:nil];
35 | }
36 |
37 | - (IBAction)closeSheet:(id)sender {
38 | NSWindow *window = self.view.window;
39 | [[window sheetParent] endSheet:window];
40 | }
41 |
42 | - (BOOL)validateCheck {
43 | if ((self.port1TextField.stringValue && [self.port1TextField.stringValue intValue] <= 1024)
44 | || (self.port2TextField.stringValue && [self.port2TextField.stringValue intValue] <= 1024)) {
45 | return YES;
46 | } else {
47 | return NO;
48 | }
49 | }
50 |
51 | @end
52 |
--------------------------------------------------------------------------------
/LoLKR/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.4.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 12
25 | LSApplicationCategoryType
26 | public.app-category.utilities
27 | LSMinimumSystemVersion
28 | $(MACOSX_DEPLOYMENT_TARGET)
29 | NSAppTransportSecurity
30 |
31 | NSExceptionDomains
32 |
33 | leagueoflegends.com
34 |
35 | NSIncludesSubdomains
36 |
37 | NSTemporaryExceptionAllowsInsecureHTTPLoads
38 |
39 |
40 | www.leagueoflegends.co.kr
41 |
42 | NSIncludesSubdomains
43 |
44 | NSTemporaryExceptionAllowsInsecureHTTPLoads
45 |
46 |
47 |
48 |
49 | NSHumanReadableCopyright
50 | Copyright © 2015 Jaesung Koo. All rights reserved.
51 | NSMainNibFile
52 | Main
53 | NSPrincipalClass
54 | NSApplication
55 | SUFeedURL
56 | https://raw.githubusercontent.com/mrz1277/LoLKR/master/updates.xml
57 | SUPublicDSAKeyFile
58 | dsa_pub.pem
59 |
60 |
61 |
--------------------------------------------------------------------------------
/LoLKR/dsa_pub.pem:
--------------------------------------------------------------------------------
1 | -----BEGIN PUBLIC KEY-----
2 | MIIGOjCCBC0GByqGSM44BAEwggQgAoICAQDYXvkeM6D6WtHEJGucdQaUop81VJTH
3 | A2VxnPyOTiB88aR3GoWxUqE7K8cHpKvMLlckwS+GTyvjqGtqmPNm5IlJucZeZEFB
4 | bcaaQVkMWsLpC48EHF5wxHvdO5vAYXMrTN68duH31xApRAgqZs078g5HEUVmrLCk
5 | 66s1mpPOQdI1BA3qMH7IPBq/wsp2flgMquj50PtUUec/vl/rhBqpWvpXjT82zvG/
6 | 19admgYpcegvbPVZY8/NsdKxtSfXGoaVp6HJLRDOqhO4lhWYU+vrOVupgXZ2Qv3w
7 | hJADTdc/mKlNohjfQYqV7C6Byaxfo/G+vJTJmFLVlWZxo8u+ThRbYC4ldcNVc4dM
8 | FKt+DIXTwUeiT7fEa38J/bs2VGDeBBl+il38ofel8r0T4ZesD6HK7DaPLDzVhNRH
9 | x3CWyV+yHdrTFVRZ4vmovPWqixWsvDKktYU4o5J85N6S6YVDzVa/x8pKbcPBV2a0
10 | lW+GNDv29pWrkc3YdT9sYVycZ953rO7lEQsIXsoJL5UnwTv0GDMVSgXZg0o4vC6s
11 | SECjmL4DXbpeECi9cYv6DChf0plWmfSx/JEeRXkVZ8h54rGQrHGbkGplcCsJbwyW
12 | u3Sa9YytJ2TR+R1lJQOCZI0OK663dZegkYDnCt2p1dwC95vEeI9a0XOzSwXJZaSS
13 | iaOnie30OXc3QwIVANs/+w40xrqWfS1/Twgp0zkhCAnTAoICAG0gXboJiJWUUmzb
14 | 9hEk3LIcHaEaj3deolkuHkpOevhVOblaZCJHHRp00DNImLERzLGEB8eIkJNfizlb
15 | KqNCHdFk7AdTG4jag9fN6/i54z+GwKAHQmIA6B9Ni43goR68WGQwwmgdp58TnwPh
16 | uLR3lt2b9Ug4ulMXlFQynk+wnIqbdvXflXKdw1at7KWE44ng9m+qd3tSAOdFRGSs
17 | 0JAOeiTmNoRpreZ0KMzQEf0vinC++aa0hkJXdn0ijkP/cRQCrpQfGQTOSz04YRda
18 | SsYbyDktUQkb0O/544Q/2bRe9tIsP4iBywmddkVKkPLwbT7RQR6aCl6jvQTCWakY
19 | RU83rlr+Wz16ZNBZF/5QVNwtcCuCLK3vNebrbBxN86499N4vMTXl6LQncT784Dgl
20 | Uxq/kOiVI67AtHfyXo8CeETl4euS75P8XAbf2JGcvGjFxBr8f4CwmeyI2NpaLLxG
21 | AYzs0P8bNUHa5COFgpewwzdzTD1Np2iHtLzwq67rIkDqx3+YtYqG+uvcuAi3Qew3
22 | fMDFS3bvwZH6bTrnR9RPSVn9YoVqze1PrF/ZXB+empLrNWtIs73FmAwbkG1UYlkn
23 | XSXMO2iXPH2wwPPZ6DdAstcwNCqe61HBMpM1z7PjD8D92oLecpoCeT7/hKVWqz7q
24 | JVB3MdEXpOM0nMyXAocRqtBFl2O1A4ICBQACggIAeYleNi87OOaXdr/WcHnIlRMG
25 | mXYZ6kx605lh63lbgwGxTXj+OIN8laN7zIOauUSGSxVQWptWhhc6/QVI4e243UsB
26 | taF1j1vSWdcNAzaRgC0It8V5WpaMWDLQStPEZx+OJrdF6wBVDcVdxdef2BxqWPrP
27 | CGZApKD4spRIFWs7tjngYPp/XmCqUAEWUAWpqGmObnLKduUmZIqBOgMPVNhMQcQV
28 | L2rL98w5oFk37hnZ65PqPJkv1k4+4X3G7li0BTDACEU+YuRvlSNPr+zc7V8opa5D
29 | Na8U3og5Soa9Ei3Yr6WDWbk+/x3Bo69KR63lrD2/AJQ+chAQ37RoBdgi2+IkV+Oy
30 | 5+Ma4c7ZyChwKAVTPOo+CnaeqZuNYQFksXeAWSjEoDwUXvGKLAKd3SUUPN+5SwCE
31 | LHa5sS3vzpyRcAmzNmZL4y+PZn2gyYlhL43teMQuIfCyBGWA/WV8pjN72RelP9bm
32 | ynpqTjwv9rULnDOzsX9sjSKv6SPcF/dL2+3FU99MGbV6RMms+XKX/3Jhz9qXZIym
33 | cpXMGnGCy/Bz0B7oHUeDy+dL1sx2626fOk4rzZ2fBufZV4gwjOY7rcwhzHh2lVTl
34 | +upYYBWeVBSn+KEyy/JkZuFpmIZhvPIsopHqgY0mailgGlAd9A1cKDPMHYqYvrT+
35 | IZtDNuRZMxNNxkLjSAo=
36 | -----END PUBLIC KEY-----
37 |
--------------------------------------------------------------------------------
/LoLKR/1_nginx.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # 1_nginx.sh
4 | # LoLKR
5 | #
6 | # Created by Jason Koo on 4/9/15.
7 | # Copyright (c) 2015 Jaesung Koo. All rights reserved.
8 | #
9 | # $> ./1_nginx.sh 8010 8020
10 |
11 | # arguments
12 | if [ "$#" -ne 2 ]; then
13 | echo "Illegal number of parameters"
14 | exit 1
15 | fi
16 |
17 | # install
18 | if type /usr/local/bin/brew 2>/dev/null; then
19 | /usr/local/bin/brew update && /usr/local/bin/brew install nginx
20 | else
21 | echo "터미널에 다음 커맨드를 복사해서 brew를 먼저 설치해주세요. ruby -e \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\""
22 | exit 1
23 | fi
24 |
25 | # exceptions
26 | if ! type /usr/local/bin/nginx 2>/dev/null; then
27 | echo "nginx가 설치되지 않았습니다."
28 | exit 1
29 | fi
30 |
31 | if [ ! -d "/usr/local/etc/nginx/" ]; then
32 | echo "nginx 설정 폴더(/usr/local/etc/nginx/)가 없습니다."
33 | exit 1
34 | fi
35 |
36 | # configuration
37 | echo "
38 | worker_processes 1;
39 |
40 | events {
41 | worker_connections 1024;
42 | }
43 |
44 | http {
45 | include mime.types;
46 | default_type text/plain;
47 |
48 | # disable auto-update
49 | server {
50 | listen $1;
51 | server_name localhost;
52 |
53 | location / {
54 | root html;
55 | try_files \$uri \$uri/ @cdn;
56 | }
57 |
58 | location @cdn {
59 | proxy_pass http://l3cdn.riotgames.com;
60 | proxy_connect_timeout 60s;
61 | proxy_read_timeout 60s;
62 | }
63 | }
64 |
65 | # enable auto-update
66 | server {
67 | listen $2;
68 | server_name localhost;
69 |
70 | rewrite ^(.*)_KR\$ \$1_OC1;
71 | rewrite ^(.*)_ko_kr/(((?!files|releasemanifest).)*)\$ \$1_en_au/\$2;
72 | rewrite ^(.*)_kr/(((?!files|releasemanifest).)*)\$ \$1_oc1/\$2;
73 |
74 | location / {
75 | proxy_pass http://l3cdn.riotgames.com;
76 | proxy_connect_timeout 60s;
77 | proxy_read_timeout 60s;
78 | }
79 | }
80 | }
81 | " > /usr/local/etc/nginx/nginx.conf
82 |
83 | # start item
84 | if [ ! -d ~/Library/LaunchAgents ]; then
85 | mkdir ~/Library/LaunchAgents
86 | fi
87 | ln -sf /usr/local/opt/nginx/homebrew.mxcl.nginx.plist ~/Library/LaunchAgents/
88 |
89 | # run
90 | if ps ax | grep -v grep | grep -v 1_nginx | grep nginx > /dev/null; then
91 | /usr/local/bin/nginx -s reload
92 | else
93 | /usr/local/bin/nginx
94 | fi
95 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 맥 공식 어플리케이션 출시
2 |
3 | http://www.leagueoflegends.co.kr/?m=download&mod=client_mac
4 |
5 | ---
6 |
7 | **_이 프로젝트는 더 이상 유지되지 않습니다._**
8 |
9 | 업데이트는 LoLKR 실행하고 상단 메뉴바의 `롤 한국 서버 패치` 메뉴를 누르고 `업데이트 확인`을 누르시면 됩니다.
10 |
11 | * 2016-03-13 : (v1.4.0) 6.5 패치 대응. 오세아니아로 기본 서버 변경.
12 | * 2015-09-01 : (v1.3.3) 로비 화면 UI 업데이트 [@billieyang](https://github.com/billieyang)님 제공
13 | * 2015-07-22 : (v1.3.0) 부팅때 nginx가 켜지지 않는 문제, 패치 때마다 한국어 음성이 나오지 않는 문제 해결
14 | * 2015-05-15 : (v1.2.3) 북미 및 한국 서버 버전 확인
15 | * 2015-05-01 : (v1.2.2) 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
16 | * 2015-04-21 : (v1.2.0) 10.9(Mavericks)에서 창이 안뜨는 문제 해결
17 | * 2015-04-17 : (v1.1.0) 자체 업데이트 지원
18 | * 2015-04-14 : (v1.0.0) 배포
19 |
20 | # 시작 전 주의사항
21 |
22 | 본 프로그램은 한국 서버가 업데이트 되기전에 **미리** 패치해놓고 있어야 북미와 버전 차이가 나는 업데이트 기간 동안 정상적으로 접속이 가능합니다. 예를 들어 현재 한국 서버 버전은 아직 5.8인데 롤을 실행하여 5.9로 업데이트 되었다면 아래 앱을 설치한다고 해서 다시 5.8로 접속할 수는 없습니다. 즉 본 프로그램으로 미리 패치해서 업데이트 방지로 걸려있지 않는한 북미 업데이트 기간에 접속이 안된다고 질문글 올리셔도 방법이 없습니다.
23 |
24 | # 사용법
25 |
26 | ## 1. 오세아니아 롤 설치
27 |
28 | 더이상 북미 버전을 사용하지 않습니다. 아래 링크에서 오세아니아 서버 롤을 설치합니다. https://signup.oce.leagueoflegends.com/en/signup/redownload
29 |
30 | ## 2. [brew](http://brew.sh/) 설치
31 |
32 | 먼저 `brew`(OS X 패키지 관리자)가 설치 안되어 있으신 분들은 설치해 주셔야 합니다.
33 | ```
34 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
35 | ```
36 | 터미널에 위 명령어를 복사하시고 붙여넣기해서 실행해 주시면 설치가 진행됩니다. 설치 중간에 `/usr/local` 폴더 생성을 위해 맥북 관리자 비밀번호를 한번 요구합니다. 비밀번호 입력할 때 `password:` 다음 커서가 멈춰있는것처럼 보이는데 실제로는 비밀번호를 받고 있는 상태이니 그냥 비밀번호를 치고 엔터키를 누르시면 됩니다.
37 |
38 | ## 3. 앱 [다운로드](https://github.com/mrz1277/LoLKR/releases/download/latest/LoLKR.zip)
39 | 
40 |
41 | '패치 하기' 버튼을 눌러주세요.
42 |
43 | ## 4. 패치 준비
44 | 
45 |
46 | 대부분은 그냥 확인 버튼을 누르시면 됩니다. 자세한 옵션 설정은 [이곳](https://github.com/mrz1277/LoLKR/wiki/Install-options)을 참조해 주세요.
47 |
48 | 패치가 완료되면 롤을 다시 시작해주세요.
49 |
50 | 
51 |
52 | 패치는 최초 한번만 하시면 됩니다. 여기서 주의하실 점은 **롤 업데이트 기간동안 패치하기를 하면 안되는 것입니다.** 패치하기를 진행하면 자동으로 최신 버전의 업데이트 파일들을 내려받기 때문에 롤을 실행하게 되면 오세아니아 서버 기준으로 업데이트가 진행됩니다. 업데이트 기간동안엔 아래의 스위치 조작을 하시면 됩니다.
53 |
54 | ## 5. 업데이트 스위치
55 | 
56 |
57 | 평소 자동 업데이트 방지에 스위치를 켜두고 있다가, 한국 서버가 정상적으로 업데이트 되면 그때 스위치를 잠시 끄고 롤을 실행하면 클라이언트가 정상적으로 업데이트됩니다. 업데이트가 완료되면 다시 스위치를 켜고 자동 업데이트 방지에 두고 플레이 하시면 됩니다.
58 |
59 | # 자주 묻는 질문
60 |
61 | [이곳](https://github.com/mrz1277/LoLKR/issues?q=is%3Aissue+is%3Aclosed)에서 기존에 다른 유저들이 올린 문제에 대한 부분을 먼저 검색해주세요.
62 |
63 | ### *명시되지 않은 오류가 발생했다며 롤이 실행되지 않습니다.*
64 |
65 | 
66 |
67 | `nginx`가 제대로 실행되고 있는지 확인해 주세요. `LoLKR` 앱을 켰을때 nginx 부분이 회색이면 실행되고 있지 않다는 뜻입니다.
68 |
69 | 
70 |
71 | 터미널에서 아래 커맨드를 입력해서 실행시켜주세요.
72 |
73 | ```
74 | nginx
75 | ```
76 |
77 | nginx 가 이미 실행중일때 재시작하는 커맨드:
78 |
79 | ```
80 | nginx -s reload
81 | ```
82 |
83 | ### *`brew`를 이용한 `nginx` 설치가 잘 안됩니다.*
84 |
85 | 기존에 설치된 프로그램들과 충돌이 있는 경우가 있습니다. 터미널에 아래 커맨드를 입력해서 문제점을 진단해보세요.
86 |
87 | ```
88 | brew doctor
89 | ```
90 |
91 | ### *업데이트 기간중에 패치가 되어버렸습니다. 다시 되돌릴 수 없나요?*
92 |
93 | 로컬에 웹서버를 둔 이상 로컬 메타파일이 업데이트 되면 다시 되돌리긴 어렵습니다. 그게 온라인상에 업데이트 서버가 있어야 하는 이유입니다.
94 |
95 | ### *다른 문제가 생겼어요.*
96 |
97 | [이슈](https://github.com/mrz1277/LoLKR/issues)에 올려주세요. `closed` 탭에 들어가면 기존에 질문했던 내역들도 볼 수 있으니 올리기 전에 미리 검색해 보시면 도움이 됩니다. *개인 이메일로 직접 문의는 받지 않습니다.*
98 |
99 | # 패치 삭제하기
100 |
101 | 이전으로 복원하는 가장 깔끔한 방법은 롤을 재설치 하는겁니다.
102 |
103 | 1. 기존에 설치된 롤을 `/Application` 폴더에서 삭제합니다.
104 | 2. 터미널에 아래 커맨드를 입력해 `nginx`를 삭제합니다.
105 | ```
106 | brew uninstall nginx
107 | ```
108 |
109 | 3. [북미 공식 홈](http://na.leagueoflegends.com/)에서 롤을 다운받아 설치합니다.
110 |
111 | # 지원 OS 버전
112 |
113 | OS X 10.9(Mavericks) 이상
114 |
--------------------------------------------------------------------------------
/LoLKR/3_lol.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # 3_lol.sh
4 | # LoLKR
5 | #
6 | # Created by Jason Koo on 4/9/15.
7 | # Copyright (c) 2015 Jaesung Koo. All rights reserved.
8 | #
9 | # $> ./3_lol.sh "/Applications/League of Legends.app" 8010
10 |
11 | # arguments
12 | if [ "$#" -ne 2 ]; then
13 | echo "Illegal number of parameters"
14 | exit 3
15 | fi
16 |
17 | if [ ! -d "$1" ]; then
18 | echo "롤 설치 경로를 확인해 주세요."
19 | exit 3
20 | fi
21 |
22 | BASE_DIR="$1/Contents/LoL/RADS"
23 |
24 | # add korea server on menu
25 | echo "na, na, en_US, A
26 | br, br, pt_BR, A
27 | tr, tr, tr_TR, A
28 | euw, euw, en_GB|de_DE|es_ES|fr_FR|it_IT, A
29 | eune, eune, en_GB|cs_CZ|el_GR|hu_HU|pl_PL|ro_RO, A
30 | ru, ru, ru_RU, A
31 | la1, la1, es_MX, A
32 | la2, la2, es_MX, A
33 | oc1, oc1, en_AU, A
34 | jp, jp, ja_JP, A
35 | kr, kr, ko_KR|en_US, A
36 | " > $BASE_DIR/projects/lol_patcher/managedfiles/0.0.0.45/regions.txt
37 |
38 | echo "na, NA, lol_air_client_config_na, NA1, prod.na1.lol.riotgames.com, status.leagueoflegends.com
39 | br, BR, lol_air_client_config_br, BR1, prod.br.lol.riotgames.com, status.leagueoflegends.com
40 | tr, TR, lol_air_client_config_tr, TR1, prod.tr.lol.riotgames.com, status.leagueoflegends.com
41 | euw, EUW, lol_air_client_config_euw, EUW1, prod.euw1.lol.riotgames.com, status.leagueoflegends.com
42 | eune, EUNE, lol_air_client_config_eune, EUN1, prod.eun1.lol.riotgames.com, status.leagueoflegends.com
43 | ru, RU, lol_air_client_config_ru, RU, prod.ru.lol.riotgames.com, status.leagueoflegends.com
44 | la1, LA1, lol_air_client_config_la1, LA1, prod.la1.lol.riotgames.com, status.leagueoflegends.com
45 | la2, LA2, lol_air_client_config_la2, LA2, prod.la2.lol.riotgames.com, status.leagueoflegends.com
46 | oc1, OC1, lol_air_client_config_oc1, OC1, prod.oc1.lol.riotgames.com, status.leagueoflegends.com
47 | jp, JP, lol_air_client_config_jp, jp1, prod.jp1.lol.riotgames.com, status.leagueoflegends.com
48 | kr, KR, lol_air_client_config_kr, KR, prod.kr.lol.riotgames.com, status.leagueoflegends.com
49 | " > $BASE_DIR/projects/lol_patcher/managedfiles/0.0.0.45/shards.txt
50 |
51 | echo "English, en_US
52 | Português, pt_BR
53 | Türkçe, tr_TR
54 | English, en_GB
55 | Deutsch, de_DE
56 | Español, es_ES
57 | Français, fr_FR
58 | Italiano, it_IT
59 | Čeština, cs_CZ
60 | Ελληνικά, el_GR
61 | Magyar, hu_HU
62 | Polski, pl_PL
63 | Română, ro_RO
64 | Русский, ru_RU
65 | Español, es_MX
66 | English, en_AU
67 | 日本語, ja_JP
68 | Korean, ko_KR" > $BASE_DIR/projects/lol_patcher/managedfiles/0.0.0.45/languages.txt
69 |
70 | # change update server address
71 | echo "DownloadPath = /releases/Maclive
72 | DownloadURL = 127.0.0.1:$2
73 | Region = KR" > "$BASE_DIR/system/system.cfg"
74 |
75 | # change login server address
76 | if [ ! -d "$BASE_DIR/projects/lol_air_client_config_oc1/releases" ]; then
77 | echo "북미 서버를 먼저 선택하고 업데이트가 완료되어야 합니다."
78 | exit 3
79 | fi
80 |
81 | if [ ! -d "$BASE_DIR/projects/lol_air_client_config_kr" ]; then
82 | cp -r "$BASE_DIR/projects/lol_air_client_config_oc1" "$BASE_DIR/projects/lol_air_client_config_kr"
83 | fi
84 |
85 | find "$BASE_DIR/projects/lol_air_client_config_kr" -name "lol.properties" | while read filename; do echo "host=prod.kr.lol.riotgames.com,prod.kr.lol.riotgames.com
86 | xmpp_server_url=chat.kr.lol.riotgames.com
87 | lq_uri=https://lq.kr.lol.riotgames.com
88 | rssStatusURLs=null
89 | regionTag=kr
90 | lobbyLandingURL=http://frontpage.kr.leagueoflegends.com/ko_KR/client/landing
91 | featuredGamesURL=http://spectator.kr.lol.riotgames.com:80/observer-mode/rest/featured
92 | storyPageURL=http://www.leagueoflegends.co.kr/launcher/journal.php
93 | ladderURL=http://www.leagueoflegends.co.kr
94 | platformId=KR
95 | ekg_uri=https://ekg.riotgames.com
96 | loadModuleChampionDetail=true
97 | useOldChatRenderers=true
98 | riotDataServiceDataSendProbability=1.0" > "$filename"; done
99 |
100 | echo "airConfigProject = lol_air_client_config_kr" > "$BASE_DIR/system/launcher.cfg"
101 | echo "locale = ko_KR" > "$BASE_DIR/system/locale.cfg"
102 |
--------------------------------------------------------------------------------
/updates.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 롤 한국 서버 패치
5 | https://raw.githubusercontent.com/mrz1277/LoLKR/master/updates.xml
6 | Most recent changes with links to updates.
7 | kr
8 |
9 | -
10 | Version 1.4.0
11 |
12 | 6.5 패치 대응오세아니아로 기본 서버 변경
14 | ]]>
15 |
16 | Sun, 13 Mar 2016 15:30:00 +9000
17 |
18 |
19 | -
20 | Version 1.3.3
21 |
22 | 업데이트 이력
24 |
v1.3.3
25 |
26 | v1.3.2
27 |
28 | v1.3.1
29 |
30 | v1.3.0
31 | - 부팅때 nginx가 켜지지 않는 문제 해결
- 패치 때마다 한국어 음성이 나오지 않는 문제 해결
- 업데이트 기간 경고 메세지 추가
32 | v1.2.3
33 |
34 | v1.2.2
35 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
36 | v1.2.1
37 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
38 | v1.2
39 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
40 | ]]>
41 |
42 | Tue, 01 Sep 2015 09:00:00 +9000
43 |
44 |
45 | -
46 | Version 1.3.2
47 |
48 | 업데이트 이력
50 |
v1.3.2
51 |
52 | v1.3.1
53 |
54 | v1.3.0
55 | - 부팅때 nginx가 켜지지 않는 문제 해결
- 패치 때마다 한국어 음성이 나오지 않는 문제 해결
- 업데이트 기간 경고 메세지 추가
56 | v1.2.3
57 |
58 | v1.2.2
59 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
60 | v1.2.1
61 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
62 | v1.2
63 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
64 | ]]>
65 |
66 | Thu, 23 Jul 2015 12:20:00 +9000
67 |
68 |
69 | -
70 | Version 1.3.1
71 |
72 | 업데이트 이력
74 |
v1.3.1
75 |
76 | v1.3.0
77 | - 부팅때 nginx가 켜지지 않는 문제 해결
- 패치 때마다 한국어 음성이 나오지 않는 문제 해결
- 업데이트 기간 경고 메세지 추가
78 | v1.2.3
79 |
80 | v1.2.2
81 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
82 | v1.2.1
83 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
84 | v1.2
85 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
86 | ]]>
87 |
88 | Thu, 23 Jul 2015 02:20:00 +9000
89 |
90 |
91 | -
92 | Version 1.3.0
93 |
94 | 업데이트 이력
96 |
v1.3.0
97 | - 부팅때 nginx가 켜지지 않는 문제 해결
- 패치 때마다 한국어 음성이 나오지 않는 문제 해결
- 업데이트 기간 경고 메세지 추가
98 | v1.2.3
99 |
100 | v1.2.2
101 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
102 | v1.2.1
103 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
104 | v1.2
105 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
106 | ]]>
107 |
108 | Wed, 22 Jul 2015 12:00:00 +9000
109 |
110 |
111 | -
112 | Version 1.2.3
113 |
114 | 업데이트 이력
116 |
v1.2.3
117 |
118 | v1.2.2
119 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
120 | v1.2.1
121 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
122 | v1.2
123 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
124 | ]]>
125 |
126 | Fri, 15 May 2015 22:00:00 +9000
127 |
128 |
129 | -
130 | Version 1.2.2
131 |
132 | 업데이트 이력
134 |
v1.2.2
135 | - 5.8패치 대응. `패치하기`를 먼저 한번 실행한 다음 업데이트 스위치를 끄면 5.8업데이트가 정상적으로 진행됩니다.
136 | v1.2.1
137 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
138 | v1.2
139 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
140 | ]]>
141 |
142 | Fri, 01 May 2015 10:00:00 +9000
143 |
144 |
145 | -
146 | Version 1.2.1
147 |
148 | 업데이트 이력
150 |
v1.2.1
151 | - 시작아이템 등록 폴더 존재하지 않으면 생성해서 nginx 등록
152 | v1.2
153 | - OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
154 | ]]>
155 |
156 | Tue, 21 Apr 2015 11:40:11 +9000
157 |
158 |
159 | -
160 | Version 1.2
161 |
162 | v1.2
164 |
- OS X 10.9(Mavericks)에서 창이 안뜨는 문제 해결
165 | ]]>
166 |
167 | Tue, 21 Apr 2015 05:40:11 +9000
168 |
169 |
170 |
171 |
172 |
--------------------------------------------------------------------------------
/LoLKR/ITSwitch.m:
--------------------------------------------------------------------------------
1 | //
2 | // ITSwitch.m
3 | // ITSwitch-Demo
4 | //
5 | // Created by Ilija Tovilo on 01/02/14.
6 | // Copyright (c) 2014 Ilija Tovilo. All rights reserved.
7 | //
8 |
9 | #import "ITSwitch.h"
10 | #import
11 |
12 |
13 | // ----------------------------------------------------
14 | #pragma mark - Static Constants
15 | // ----------------------------------------------------
16 |
17 | static NSTimeInterval const kAnimationDuration = 0.4f;
18 |
19 | static CGFloat const kBorderLineWidth = 1.f;
20 |
21 | static CGFloat const kGoldenRatio = 1.61803398875f;
22 | static CGFloat const kDecreasedGoldenRatio = 1.38;
23 |
24 | static CGFloat const kEnabledOpacity = 1.f;
25 | static CGFloat const kDisabledOpacity = 0.5f;
26 |
27 | // ----------------------------------------------------
28 | #pragma mark - Preprocessor
29 | // ----------------------------------------------------
30 |
31 |
32 | #define kKnobBackgroundColor [NSColor colorWithCalibratedWhite:1.f alpha:1.f]
33 |
34 | #define kDisabledBorderColor [NSColor colorWithCalibratedWhite:0.f alpha:0.2f]
35 | #define kDisabledBackgroundColor [NSColor clearColor]
36 | #define kDefaultTintColor [NSColor colorWithCalibratedRed:0.27f green:0.86f blue:0.36f alpha:1.f]
37 | #define kInactiveBackgroundColor [NSColor colorWithCalibratedWhite:0 alpha:0.3]
38 |
39 | // ---------------------------------------------------------------------------------------
40 | #pragma mark - Interface Extension
41 | // ---------------------------------------------------------------------------------------
42 |
43 | @interface ITSwitch () {
44 | __weak id _target;
45 | SEL _action;
46 | }
47 |
48 | @property (nonatomic, getter = isActive) BOOL active;
49 | @property (nonatomic, getter = hasDragged) BOOL dragged;
50 | @property (nonatomic, getter = isDraggingTowardsOn) BOOL draggingTowardsOn;
51 |
52 | @property (nonatomic, readonly, strong) CALayer *rootLayer;
53 | @property (nonatomic, readonly, strong) CALayer *backgroundLayer;
54 | @property (nonatomic, readonly, strong) CALayer *knobLayer;
55 | @property (nonatomic, readonly, strong) CALayer *knobInsideLayer;
56 |
57 | @end
58 |
59 |
60 |
61 | // ---------------------------------------------------------------------------------------
62 | #pragma mark - ITSwitch
63 | // ---------------------------------------------------------------------------------------
64 |
65 | @implementation ITSwitch
66 | @synthesize tintColor = _tintColor;
67 |
68 |
69 |
70 | // ----------------------------------------------------
71 | #pragma mark - Init
72 | // ----------------------------------------------------
73 |
74 | - (id)initWithCoder:(NSCoder *)coder {
75 | self = [super initWithCoder:coder];
76 | if (!self) return nil;
77 |
78 | [self setUp];
79 |
80 | return self;
81 | }
82 |
83 | - (id)initWithFrame:(NSRect)frame {
84 | self = [super initWithFrame:frame];
85 | if (!self) return nil;
86 |
87 | [self setUp];
88 |
89 | return self;
90 | }
91 |
92 | - (void)setUp {
93 | // The Switch is enabled per default
94 | self.enabled = YES;
95 |
96 | // Set up the layer hierarchy
97 | [self setUpLayers];
98 | }
99 |
100 | - (void)setUpLayers {
101 | // Root layer
102 | _rootLayer = [CALayer layer];
103 | //_rootLayer.delegate = self;
104 | self.layer = _rootLayer;
105 | self.wantsLayer = YES;
106 |
107 | // Background layer
108 | _backgroundLayer = [CALayer layer];
109 | _backgroundLayer.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
110 | _backgroundLayer.bounds = _rootLayer.bounds;
111 | _backgroundLayer.anchorPoint = (CGPoint){ .x = 0.f, .y = 0.f };
112 | _backgroundLayer.borderWidth = kBorderLineWidth;
113 | [_rootLayer addSublayer:_backgroundLayer];
114 |
115 | // Knob layer
116 | _knobLayer = [CALayer layer];
117 | _knobLayer.frame = [self rectForKnob];
118 | _knobLayer.autoresizingMask = kCALayerHeightSizable;
119 | _knobLayer.backgroundColor = [kKnobBackgroundColor CGColor];
120 | _knobLayer.shadowColor = [[NSColor blackColor] CGColor];
121 | _knobLayer.shadowOffset = (CGSize){ .width = 0.f, .height = -2.f };
122 | _knobLayer.shadowRadius = 1.f;
123 | _knobLayer.shadowOpacity = 0.3f;
124 | [_rootLayer addSublayer:_knobLayer];
125 |
126 | _knobInsideLayer = [CALayer layer];
127 | _knobInsideLayer.frame = _knobLayer.bounds;
128 | _knobInsideLayer.autoresizingMask = kCALayerWidthSizable | kCALayerHeightSizable;
129 | _knobInsideLayer.shadowColor = [[NSColor blackColor] CGColor];
130 | _knobInsideLayer.shadowOffset = (CGSize){ .width = 0.f, .height = 0.f };
131 | _knobInsideLayer.backgroundColor = [[NSColor whiteColor] CGColor];
132 | _knobInsideLayer.shadowRadius = 1.f;
133 | _knobInsideLayer.shadowOpacity = 0.35f;
134 | [_knobLayer addSublayer:_knobInsideLayer];
135 |
136 | // Initial
137 | [self reloadLayerSize];
138 | [self reloadLayer];
139 | }
140 |
141 |
142 |
143 | // ----------------------------------------------------
144 | #pragma mark - NSView
145 | // ----------------------------------------------------
146 |
147 | - (BOOL)acceptsFirstMouse:(NSEvent *)theEvent {
148 | return YES;
149 | }
150 |
151 | - (void)setFrame:(NSRect)frameRect {
152 | [super setFrame:frameRect];
153 |
154 | [self reloadLayerSize];
155 | }
156 |
157 | - (void)drawFocusRingMask {
158 | CGFloat cornerRadius = NSHeight([self bounds])/2.0;
159 | NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:cornerRadius yRadius:cornerRadius];
160 | [[NSColor blackColor] set];
161 | [path fill];
162 | }
163 |
164 | - (BOOL)canBecomeKeyView {
165 | return [NSApp isFullKeyboardAccessEnabled];
166 | }
167 |
168 | - (NSRect)focusRingMaskBounds {
169 | return [self bounds];
170 | }
171 |
172 |
173 | // ----------------------------------------------------
174 | #pragma mark - Update Layer
175 | // ----------------------------------------------------
176 |
177 | - (void)reloadLayer {
178 | [CATransaction begin];
179 | [CATransaction setAnimationDuration:kAnimationDuration];
180 | {
181 | // ------------------------------- Animate Border
182 | // The green part also animates, which looks kinda weird
183 | // We'll use the background-color for now
184 | // _backgroundLayer.borderWidth = (YES || self.isActive || self.isOn) ? NSHeight(_backgroundLayer.bounds) / 2 : kBorderLineWidth;
185 |
186 | // ------------------------------- Animate Colors
187 | if (([self hasDragged] && [self isDraggingTowardsOn]) || (![self hasDragged] && [self isOn])) {
188 | _backgroundLayer.borderColor = [self.tintColor CGColor];
189 | _backgroundLayer.backgroundColor = [self.tintColor CGColor];
190 | } else {
191 | _backgroundLayer.borderColor = [kDisabledBorderColor CGColor];
192 | _backgroundLayer.backgroundColor = [kDisabledBackgroundColor CGColor];
193 | }
194 |
195 | // ------------------------------- Animate Enabled-Disabled state
196 | _rootLayer.opacity = (self.isEnabled) ? kEnabledOpacity : kDisabledOpacity;
197 |
198 | // ------------------------------- Animate Frame
199 | if (![self hasDragged]) {
200 | CAMediaTimingFunction *function = [CAMediaTimingFunction functionWithControlPoints:0.25f :1.5f :0.5f :1.f];
201 | [CATransaction setAnimationTimingFunction:function];
202 | }
203 |
204 | self.knobLayer.frame = [self rectForKnob];
205 | self.knobInsideLayer.frame = self.knobLayer.bounds;
206 | }
207 | [CATransaction commit];
208 | }
209 |
210 | - (void)reloadLayerSize {
211 | [CATransaction begin];
212 | [CATransaction setDisableActions:YES];
213 | {
214 | self.knobLayer.frame = [self rectForKnob];
215 | self.knobInsideLayer.frame = self.knobLayer.bounds;
216 |
217 | [_backgroundLayer setCornerRadius:_backgroundLayer.bounds.size.height / 2.f];
218 | [_knobLayer setCornerRadius:_knobLayer.bounds.size.height / 2.f];
219 | [_knobInsideLayer setCornerRadius:_knobLayer.bounds.size.height / 2.f];
220 | }
221 | [CATransaction commit];
222 | }
223 |
224 | - (CGFloat)knobHeightForSize:(NSSize)size
225 | {
226 | return size.height - (kBorderLineWidth * 2.f);
227 | }
228 |
229 | - (CGRect)rectForKnob {
230 | CGFloat height = [self knobHeightForSize:_backgroundLayer.bounds.size];
231 | CGFloat width = ![self isActive] ? (NSWidth(_backgroundLayer.bounds) - 2.f * kBorderLineWidth) * 1.f / kGoldenRatio :
232 | (NSWidth(_backgroundLayer.bounds) - 2.f * kBorderLineWidth) * 1.f / kDecreasedGoldenRatio;
233 | CGFloat x = ((![self hasDragged] && ![self isOn]) || (self.hasDragged && ![self isDraggingTowardsOn])) ?
234 | kBorderLineWidth :
235 | NSWidth(_backgroundLayer.bounds) - width - kBorderLineWidth;
236 |
237 | return (CGRect) {
238 | .size.width = width,
239 | .size.height = height,
240 | .origin.x = x,
241 | .origin.y = kBorderLineWidth,
242 | };
243 | }
244 |
245 |
246 |
247 | // ----------------------------------------------------
248 | #pragma mark - NSResponder
249 | // ----------------------------------------------------
250 |
251 | - (BOOL)acceptsFirstResponder {
252 | return [NSApp isFullKeyboardAccessEnabled];
253 | }
254 |
255 | - (void)mouseDown:(NSEvent *)theEvent {
256 | if (!self.isEnabled) return;
257 |
258 | self.active = YES;
259 |
260 | [self reloadLayer];
261 | }
262 |
263 | - (void)mouseDragged:(NSEvent *)theEvent {
264 | if (!self.isEnabled) return;
265 |
266 | self.dragged = YES;
267 |
268 | NSPoint draggingPoint = [self convertPoint:[theEvent locationInWindow] fromView:nil];
269 | self.draggingTowardsOn = draggingPoint.x >= NSWidth(self.bounds) / 2.f;
270 |
271 | [self reloadLayer];
272 | }
273 |
274 | - (void)mouseUp:(NSEvent *)theEvent {
275 | if (!self.isEnabled) return;
276 |
277 | self.active = NO;
278 |
279 | BOOL isOn = (![self hasDragged]) ? ![self isOn] : [self isDraggingTowardsOn];
280 | BOOL invokeTargetAction = (isOn != [self isOn]);
281 |
282 | self.on = isOn;
283 | if (invokeTargetAction) [self _invokeTargetAction];
284 |
285 | // Reset
286 | self.dragged = NO;
287 | self.draggingTowardsOn = NO;
288 |
289 | [self reloadLayer];
290 | }
291 |
292 | - (void)moveLeft:(id)sender {
293 | if ([self isOn]) {
294 | self.on = NO;
295 | [self _invokeTargetAction];
296 | }
297 | }
298 |
299 | - (void)moveRight:(id)sender {
300 | if ([self isOn] == NO) {
301 | self.on = YES;
302 | [self _invokeTargetAction];
303 | }
304 | }
305 |
306 | - (BOOL)performKeyEquivalent:(NSEvent *)theEvent {
307 | BOOL handledKeyEquivalent = NO;
308 | if ([[self window] firstResponder] == self) {
309 | NSInteger ch = [theEvent keyCode];
310 |
311 | if (ch == 49) //Space
312 | {
313 | self.on = ![self isOn];
314 | [self _invokeTargetAction];
315 | handledKeyEquivalent = YES;
316 | }
317 | }
318 | return handledKeyEquivalent;
319 | }
320 |
321 |
322 | // ----------------------------------------------------
323 | #pragma mark - Accessors
324 | // ----------------------------------------------------
325 |
326 | - (id)target {
327 | return _target;
328 | }
329 |
330 | - (void)setTarget:(id)target {
331 | _target = target;
332 | }
333 |
334 | - (SEL)action {
335 | return _action;
336 | }
337 |
338 | - (void)setAction:(SEL)action {
339 | _action = action;
340 | }
341 |
342 | - (void)setOn:(BOOL)on {
343 | if (_on != on) {
344 | _on = on;
345 | }
346 |
347 | [self reloadLayer];
348 | }
349 |
350 | - (NSColor *)tintColor {
351 | if (!_tintColor) return kDefaultTintColor;
352 |
353 | return _tintColor;
354 | }
355 |
356 | - (void)setTintColor:(NSColor *)tintColor {
357 | _tintColor = tintColor;
358 |
359 | [self reloadLayer];
360 | }
361 |
362 | - (void)setEnabled:(BOOL)enabled {
363 | [super setEnabled:enabled];
364 | [self reloadLayer];
365 | }
366 |
367 | // -----------------------------------
368 | #pragma mark - Helpers
369 | // -----------------------------------
370 |
371 | - (void)_invokeTargetAction {
372 | if (self.target && self.action) {
373 | NSMethodSignature *signature = [[self.target class] instanceMethodSignatureForSelector:self.action];
374 | NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
375 | [invocation setTarget:self.target];
376 | [invocation setSelector:self.action];
377 | [invocation setArgument:(void *)&self atIndex:2];
378 |
379 | [invocation invoke];
380 | }
381 | }
382 |
383 | // -----------------------------------
384 | #pragma mark - Accessibility
385 | // -----------------------------------
386 |
387 | - (BOOL)accessibilityIsIgnored {
388 | return NO;
389 | }
390 |
391 | - (id)accessibilityHitTest:(NSPoint)point {
392 | return self;
393 | }
394 |
395 | - (NSArray *)accessibilityAttributeNames {
396 | static NSArray *attributes = nil;
397 | if (attributes == nil)
398 | {
399 | NSMutableArray *mutableAttributes = [[super accessibilityAttributeNames] mutableCopy];
400 | if (mutableAttributes == nil)
401 | mutableAttributes = [NSMutableArray new];
402 |
403 | // Add attributes
404 | if (![mutableAttributes containsObject:NSAccessibilityValueAttribute])
405 | [mutableAttributes addObject:NSAccessibilityValueAttribute];
406 |
407 | if (![mutableAttributes containsObject:NSAccessibilityEnabledAttribute])
408 | [mutableAttributes addObject:NSAccessibilityEnabledAttribute];
409 |
410 | if (![mutableAttributes containsObject:NSAccessibilityDescriptionAttribute])
411 | [mutableAttributes addObject:NSAccessibilityDescriptionAttribute];
412 |
413 | // Remove attributes
414 | if ([mutableAttributes containsObject:NSAccessibilityChildrenAttribute])
415 | [mutableAttributes removeObject:NSAccessibilityChildrenAttribute];
416 |
417 | attributes = [mutableAttributes copy];
418 | }
419 | return attributes;
420 | }
421 |
422 | - (id)accessibilityAttributeValue:(NSString *)attribute {
423 | id retVal = nil;
424 | if ([attribute isEqualToString:NSAccessibilityRoleAttribute])
425 | retVal = NSAccessibilityCheckBoxRole;
426 | else if ([attribute isEqualToString:NSAccessibilityValueAttribute])
427 | retVal = [NSNumber numberWithInt:self.isOn];
428 | else if ([attribute isEqualToString:NSAccessibilityEnabledAttribute])
429 | retVal = [NSNumber numberWithBool:[self isEnabled]];
430 | else
431 | retVal = [super accessibilityAttributeValue:attribute];
432 | return retVal;
433 | }
434 |
435 | - (BOOL)accessibilityIsAttributeSettable:(NSString *)attribute {
436 | BOOL retVal;
437 | if ([attribute isEqualToString:NSAccessibilityValueAttribute])
438 | retVal = YES;
439 | else if ([attribute isEqualToString:NSAccessibilityEnabledAttribute])
440 | retVal = NO;
441 | else if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute])
442 | retVal = NO;
443 | else
444 | retVal = [super accessibilityIsAttributeSettable:attribute];
445 | return retVal;
446 | }
447 |
448 | - (void)accessibilitySetValue:(id)value forAttribute:(NSString *)attribute {
449 | if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
450 | BOOL invokeTargetAction = self.isOn != [value boolValue];
451 | self.on = [value boolValue];
452 | if (invokeTargetAction) {
453 | [self _invokeTargetAction];
454 | }
455 | }
456 | else {
457 | [super accessibilitySetValue:value forAttribute:attribute];
458 | }
459 | }
460 |
461 | - (NSArray *)accessibilityActionNames {
462 | static NSArray *actions = nil;
463 | if (actions == nil)
464 | {
465 | NSMutableArray *mutableActions = [[super accessibilityActionNames] mutableCopy];
466 | if (mutableActions == nil)
467 | mutableActions = [NSMutableArray new];
468 | if (![mutableActions containsObject:NSAccessibilityPressAction])
469 | [mutableActions addObject:NSAccessibilityPressAction];
470 | actions = [mutableActions copy];
471 | }
472 | return actions;
473 | }
474 |
475 | - (void)accessibilityPerformAction:(NSString *)actionString {
476 | if ([actionString isEqualToString:NSAccessibilityPressAction]) {
477 | self.on = ![self isOn];
478 | [self _invokeTargetAction];
479 | }
480 | else {
481 | [super accessibilityPerformAction:actionString];
482 | }
483 | }
484 |
485 | @end
486 |
--------------------------------------------------------------------------------
/LoLKR/ViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.m
3 | // LoLKR
4 | //
5 | // Created by Jaesung Koo on 3/28/15.
6 | // Copyright (c) 2015 Jaesung Koo. All rights reserved.
7 | //
8 |
9 | #import "ViewController.h"
10 | #import
11 | #import "ITSwitch.h"
12 | #import
13 |
14 | @implementation ViewController {
15 |
16 | __weak IBOutlet ITSwitch *itSwitch;
17 | __weak IBOutlet NSImageView *nginxImageView;
18 | __weak IBOutlet NSButton *patchAllButton;
19 | __weak IBOutlet NSProgressIndicator *progress;
20 | __unsafe_unretained IBOutlet NSTextView *textView;
21 | __weak IBOutlet NSViewController *configViewController;
22 | __weak IBOutlet NSTextField *labelKR;
23 | __weak IBOutlet NSTextField *labelNA;
24 | }
25 |
26 | - (void)awakeFromNib {
27 | [super awakeFromNib];
28 |
29 | [progress stopAnimation:nil];
30 |
31 | if ([[self runCommand:@"ps -ef | grep -v grep | grep nginx"] length] > 0) {
32 | nginxImageView.image = [NSImage imageNamed:NSImageNameStatusAvailable];
33 | itSwitch.enabled = YES;
34 | } else {
35 | nginxImageView.image = [NSImage imageNamed:NSImageNameStatusNone];
36 | itSwitch.enabled = NO;
37 | }
38 | [itSwitch setOn:[[NSUserDefaults standardUserDefaults] boolForKey:@"block_update"]];
39 |
40 | [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(runAllScripts:) name:@"runAllScript" object:nil];
41 |
42 | [self checkServerVersions];
43 |
44 | // 1.3.0
45 | NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
46 | if (![userDefaults boolForKey:@"1.3.0"]) {
47 | [self disableControls];
48 | dispatch_promise(^{
49 | return [self runScript:@"1_nginx" arguments:@[[userDefaults objectForKey:@"port1"],
50 | [userDefaults objectForKey:@"port2"]]];
51 | }).thenInBackground(^(NSNumber *status) {
52 | dispatch_sync(dispatch_get_main_queue(), ^{
53 | textView.string = [textView.string stringByAppendingString:@"\nLoLKR 1.3.0 업데이트 완료\n\n"];
54 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
55 | });
56 |
57 | return 0;
58 | }).finally(^{
59 | [self enableControls];
60 | [userDefaults setObject:@YES forKey:@"1.3.0"];
61 | });
62 | }
63 |
64 |
65 | // 1.3.3
66 | if (![userDefaults boolForKey:@"1.3.3"] && [userDefaults objectForKey:@"lol_path"]) {
67 | NSString *currentPort = itSwitch.isOn ? [userDefaults objectForKey:@"port1"] : [userDefaults objectForKey:@"port2"];
68 |
69 | dispatch_promise(^{
70 | return [self runScript:@"3_lol" arguments:@[[userDefaults objectForKey:@"lol_path"],
71 | currentPort]];
72 | }).thenInBackground(^(NSNumber *status) {
73 | dispatch_sync(dispatch_get_main_queue(), ^{
74 | textView.string = [textView.string stringByAppendingString:@"\nLoLKR 1.3.3 업데이트 완료\n\n"];
75 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
76 | });
77 |
78 | return 0;
79 | }).finally(^{
80 | [self enableControls];
81 | [userDefaults setObject:@YES forKey:@"1.3.3"];
82 | });
83 | }
84 | }
85 |
86 | - (BOOL)isSameVersion {
87 | return [[[labelKR.stringValue componentsSeparatedByString:@" "] objectAtIndex:1] isEqualToString:
88 | [[labelNA.stringValue componentsSeparatedByString:@" "] objectAtIndex:1]];
89 | }
90 |
91 | - (IBAction)patchButtonPressed:(id)sender {
92 | NSWindow *window = [[NSWindow alloc] init];
93 | [window setContentView:configViewController.view];
94 | [window setFrame:NSMakeRect(0, 0, 480, 340) display:YES];
95 |
96 | // 서버 버전이 다르면 경고 메세지
97 | if (![self isSameVersion]) {
98 | NSAlert *alert = [NSAlert new];
99 | [alert setAlertStyle:NSWarningAlertStyle];
100 | [alert setMessageText:@"북미와 버전이 다릅니다."];
101 | [alert setInformativeText:@"업데이트 기간에 패치를 하면 자동으로 북미버전으로 업데이트가 됩니다. 그래도 계속하시겠습니까? 패치하기는 최초에 한번만 하면 됩니다."];
102 | [alert addButtonWithTitle:@"패치하기"];
103 | [alert addButtonWithTitle:@"취소"];
104 | [alert beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
105 | if (returnCode == NSAlertFirstButtonReturn) {
106 | [self.view.window beginSheet:window completionHandler:nil];
107 | }
108 | }];
109 | } else {
110 | [self.view.window beginSheet:window completionHandler:nil];
111 | }
112 | }
113 |
114 | - (IBAction)switchValueChanged:(id)sender {
115 | ITSwitch *switchControl = (ITSwitch *)sender;
116 | if (!switchControl.isOn) {
117 | if (![self isSameVersion]) {
118 | NSAlert *alert = [NSAlert new];
119 | [alert setAlertStyle:NSWarningAlertStyle];
120 | [alert setMessageText:@"주의"];
121 | [alert setInformativeText:@"자동 업데이트를 허용하면 한국 서버 클라이언트가 업데이트 됩니다. 북미 서버 기준으로 한국 서버와 버전이 다르면 업데이트가 진행되어 한국 서버에 접속이 안될 수 있습니다. 한국서버 버전이 미국 서버와 같아지면 업데이트를 진행하세요."];
122 | [alert addButtonWithTitle:@"자동 업데이트 허용"];
123 | [alert addButtonWithTitle:@"취소"];
124 | [alert beginSheetModalForWindow:self.view.window completionHandler:^(NSModalResponse returnCode) {
125 | if (returnCode == NSAlertSecondButtonReturn) {
126 | [switchControl setOn:YES];
127 | } else {
128 | NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"2_download_versions" ofType:@"sh"];
129 | scriptPath = [NSString stringWithFormat:@"\"%@\"", scriptPath];
130 |
131 | dispatch_queue_t taskQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
132 | dispatch_async(taskQueue, ^{
133 | progress.hidden = NO;
134 | itSwitch.enabled = NO;
135 | [progress startAnimation:nil];
136 |
137 | NSNumber *status = [self runScript:@"update" arguments:@[@"on",
138 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port1"],
139 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port2"],
140 | [[NSUserDefaults standardUserDefaults] objectForKey:@"lol_path"],
141 | scriptPath
142 | ]];
143 | if ([status intValue] == 0) {
144 | [[NSUserDefaults standardUserDefaults] setObject:@NO forKey:@"block_update"];
145 | dispatch_sync(dispatch_get_main_queue(), ^{
146 | textView.string = [textView.string stringByAppendingString:@"\n\n"];
147 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
148 | });
149 | }
150 |
151 | [progress stopAnimation:nil];
152 | itSwitch.enabled = YES;
153 | });
154 | }
155 | }];
156 | } else {
157 | NSString *scriptPath = [[NSBundle mainBundle] pathForResource:@"2_download_versions" ofType:@"sh"];
158 | scriptPath = [NSString stringWithFormat:@"\"%@\"", scriptPath];
159 |
160 | dispatch_queue_t taskQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
161 | dispatch_async(taskQueue, ^{
162 | progress.hidden = NO;
163 | itSwitch.enabled = NO;
164 | [progress startAnimation:nil];
165 |
166 | NSNumber *status = [self runScript:@"update" arguments:@[@"on",
167 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port1"],
168 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port2"],
169 | [[NSUserDefaults standardUserDefaults] objectForKey:@"lol_path"],
170 | scriptPath
171 | ]];
172 | if ([status intValue] == 0) {
173 | [[NSUserDefaults standardUserDefaults] setObject:@NO forKey:@"block_update"];
174 | dispatch_sync(dispatch_get_main_queue(), ^{
175 | textView.string = [textView.string stringByAppendingString:@"\n\n"];
176 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
177 | });
178 | }
179 |
180 | [progress stopAnimation:nil];
181 | itSwitch.enabled = YES;
182 | });
183 | }
184 | } else {
185 | dispatch_queue_t taskQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0);
186 | dispatch_async(taskQueue, ^{
187 | progress.hidden = NO;
188 | itSwitch.enabled = NO;
189 | [progress startAnimation:nil];
190 |
191 | NSNumber *status = [self runScript:@"update" arguments:@[@"off",
192 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port1"],
193 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port2"],
194 | [[NSUserDefaults standardUserDefaults] objectForKey:@"lol_path"]]];
195 | if ([status intValue] == 0) {
196 | [[NSUserDefaults standardUserDefaults] setObject:@YES forKey:@"block_update"];
197 | dispatch_sync(dispatch_get_main_queue(), ^{
198 | textView.string = [textView.string stringByAppendingString:@"\n\n"];
199 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
200 | });
201 | }
202 |
203 | itSwitch.enabled = YES;
204 | [progress stopAnimation:nil];
205 | });
206 | }
207 | }
208 |
209 | - (void)runAllScripts:(NSNotification *)noti {
210 | [self disableControls];
211 |
212 | __block BOOL success = YES;
213 |
214 | dispatch_promise(^{
215 | if ([[[noti userInfo] objectForKey:@"install_nginx"] boolValue]) {
216 | return [self runScript:@"1_nginx" arguments:@[[[NSUserDefaults standardUserDefaults] objectForKey:@"port1"],
217 | [[NSUserDefaults standardUserDefaults] objectForKey:@"port2"]]];
218 | } else {
219 | return [NSNumber numberWithInt:0];
220 | }
221 | }).thenInBackground(^(NSNumber *status) {
222 | if ([status intValue] == 0) {
223 | dispatch_sync(dispatch_get_main_queue(), ^{
224 | textView.string = [textView.string stringByAppendingString:@"완료\n\n"];
225 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
226 | });
227 |
228 | return [self runScript:@"2_download_versions" arguments:@[]];
229 | } else {
230 | success = NO;
231 | return [NSNumber numberWithInt:-1];
232 | }
233 | }).thenInBackground(^(NSNumber *status) {
234 | if ([status intValue] == 0) {
235 | dispatch_sync(dispatch_get_main_queue(), ^{
236 | textView.string = [textView.string stringByAppendingString:@"완료\n\n"];
237 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
238 | });
239 |
240 | NSString *currentPort = itSwitch.isOn ? [[NSUserDefaults standardUserDefaults] objectForKey:@"port1"]
241 | : [[NSUserDefaults standardUserDefaults] objectForKey:@"port2"];
242 |
243 | NSNumber *status3 = [self runScript:@"3_lol" arguments:@[[[NSUserDefaults standardUserDefaults] objectForKey:@"lol_path"],
244 | currentPort]];
245 |
246 | if ([status3 intValue] == 0) {
247 | dispatch_sync(dispatch_get_main_queue(), ^{
248 | textView.string = [textView.string stringByAppendingString:@"완료\n\n"];
249 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
250 | });
251 | } else {
252 | success = NO;
253 | }
254 | } else {
255 | success = NO;
256 | }
257 | }).finally(^{
258 | [self enableControls];
259 |
260 | if (success) {
261 | textView.string = [textView.string stringByAppendingString:@"한글 패치가 모두 완료되었습니다. 롤을 다시 실행해 주세요.\n\n"];
262 | [textView scrollRangeToVisible:NSMakeRange([textView.string length], 0)];
263 | }
264 | });
265 | }
266 |
267 | - (void)disableControls {
268 | itSwitch.enabled = NO;
269 | patchAllButton.enabled = NO;
270 | progress.hidden = NO;
271 | [progress startAnimation:nil];
272 | }
273 |
274 | - (void)enableControls {
275 | [progress stopAnimation:nil];
276 | patchAllButton.enabled = YES;
277 | itSwitch.enabled = YES;
278 | }
279 |
280 | - (NSNumber *)runScript:(NSString *)scriptName arguments:(NSArray *)arguments {
281 | textView.string = [textView.string stringByAppendingString:[NSString stringWithFormat:@"%@.sh\n", scriptName]];
282 |
283 | NSString *scriptFile = [[NSBundle mainBundle] pathForResource:scriptName ofType:@"sh"];
284 |
285 | NSTask *task = [[NSTask alloc] init];
286 | [task setLaunchPath:@"/bin/sh"];
287 | [task setArguments:@[@"-c", [NSString stringWithFormat:@"\"%@\" %@", scriptFile, [arguments componentsJoinedByString:@" "]]]];
288 |
289 | NSPipe *pipe = [NSPipe pipe];
290 | [task setStandardOutput: pipe];
291 |
292 | [[pipe fileHandleForReading] waitForDataInBackgroundAndNotify];
293 | [[NSNotificationCenter defaultCenter] addObserverForName:NSFileHandleDataAvailableNotification object:[pipe fileHandleForReading] queue:nil usingBlock:^(NSNotification *notification){
294 | //
295 | NSData *output = [[pipe fileHandleForReading] availableData];
296 | NSString *outStr = [[NSString alloc] initWithData:output encoding:NSUTF8StringEncoding];
297 | //
298 | if ([outStr length] > 0) {
299 | textView.string = [textView.string stringByAppendingString:[NSString stringWithFormat:@"\n%@", outStr]];
300 | }
301 | //
302 | [[pipe fileHandleForReading] waitForDataInBackgroundAndNotify];
303 | }];
304 |
305 | [task launch];
306 | [task waitUntilExit];
307 |
308 | return [NSNumber numberWithInt:[task terminationStatus]];
309 | }
310 |
311 | - (NSString *)runCommand:(NSString *)commandToRun
312 | {
313 | NSTask *task;
314 | task = [[NSTask alloc] init];
315 | [task setLaunchPath: @"/bin/sh"];
316 |
317 | NSArray *arguments = [NSArray arrayWithObjects:
318 | @"-c" ,
319 | [NSString stringWithFormat:@"%@", commandToRun],
320 | nil];
321 | [task setArguments: arguments];
322 |
323 | NSPipe *pipe;
324 | pipe = [NSPipe pipe];
325 | [task setStandardOutput: pipe];
326 |
327 | NSFileHandle *file;
328 | file = [pipe fileHandleForReading];
329 |
330 | [task launch];
331 |
332 | NSData *data;
333 | data = [file readDataToEndOfFile];
334 |
335 | NSString *output;
336 | output = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
337 | return output;
338 | }
339 |
340 | #pragma mark - 서버 버전 체크
341 |
342 | - (void)checkServerVersions {
343 | [self parseKRServer];
344 | [self parseNAServer:0];
345 | }
346 |
347 | - (void)parseKRServer {
348 | NSError *error = nil;
349 | NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(\\d+\\.\\d+) 패치 노트" options:0 error:&error];
350 |
351 | NSURL *URL = [NSURL URLWithString:@"http://www.leagueoflegends.co.kr/?m=news&cate=update"];
352 | NSURLSession *session = [NSURLSession sharedSession];
353 | [[session dataTaskWithURL:URL completionHandler:
354 | ^(NSData *data, NSURLResponse *response, NSError *error) {
355 | NSString *contentType = nil;
356 | if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
357 | NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields];
358 | contentType = headers[@"Content-Type"];
359 | }
360 | HTMLDocument *document = [HTMLDocument documentWithData:data
361 | contentTypeHeader:contentType];
362 | NSArray *rows = [document nodesMatchingSelector:@".tleft"];
363 | NSString *currentVersion = nil;
364 | for (HTMLElement *row in rows) {
365 | NSTextCheckingResult *match = [regex firstMatchInString:row.textContent options:0 range:NSMakeRange(0, row.textContent.length)];
366 | if (match.range.length != 0) {
367 | currentVersion = [row.textContent substringWithRange:[match rangeAtIndex:1]];
368 | [labelKR setStringValue:[NSString stringWithFormat:@"한국 서버: %@", currentVersion]];
369 | break;
370 | }
371 | }
372 | }] resume];
373 | }
374 |
375 | - (void)parseNAServer:(int)page {
376 | NSError *error = nil;
377 | NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"Patch (\\d+\\.\\d+) [Nn]otes?" options:0 error:&error];
378 |
379 | NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"http://oce.leagueoflegends.com/en/news?page=%d", page]];
380 | NSURLSession *session = [NSURLSession sharedSession];
381 | [[session dataTaskWithURL:URL completionHandler:
382 | ^(NSData *data, NSURLResponse *response, NSError *error) {
383 | NSString *contentType = nil;
384 | if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
385 | NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields];
386 | contentType = headers[@"Content-Type"];
387 | }
388 | HTMLDocument *document = [HTMLDocument documentWithData:data
389 | contentTypeHeader:contentType];
390 | NSArray *rows = [document nodesMatchingSelector:@".default-2-3 h4 a"];
391 | NSString *currentVersion = nil;
392 | for (HTMLElement *row in rows) {
393 | NSTextCheckingResult *match = [regex firstMatchInString:row.textContent options:0 range:NSMakeRange(0, row.textContent.length)];
394 | if (match.range.length != 0) {
395 | currentVersion = [row.textContent substringWithRange:[match rangeAtIndex:1]];
396 | [labelNA setStringValue:[NSString stringWithFormat:@"오세아니아 서버: %@", currentVersion]];
397 | break;
398 | }
399 | }
400 | if (currentVersion == nil) {
401 | [self parseNAServer:page+1];
402 | }
403 |
404 | }] resume];
405 | }
406 |
407 | @end
408 |
--------------------------------------------------------------------------------
/LoLKR.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 46;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | B386F99F263A1A9AE38AE082 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 08ADF3F2B1BE18C3FA711AC7 /* libPods.a */; };
11 | B60E118D1C952D480022EDCF /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B60E118B1C95202F0022EDCF /* Sparkle.framework */; };
12 | B60E118E1C952D480022EDCF /* Sparkle.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B60E118B1C95202F0022EDCF /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
13 | B61B57FD1AD69ECB006558AA /* 1_nginx.sh in Resources */ = {isa = PBXBuildFile; fileRef = B61B57FC1AD69DB7006558AA /* 1_nginx.sh */; };
14 | B61B57FF1AD6A0EB006558AA /* 2_download_versions.sh in Resources */ = {isa = PBXBuildFile; fileRef = B61B57FE1AD6A0EB006558AA /* 2_download_versions.sh */; };
15 | B61B58011AD6A6B2006558AA /* 3_lol.sh in Resources */ = {isa = PBXBuildFile; fileRef = B61B58001AD6A6B2006558AA /* 3_lol.sh */; };
16 | B62DFFDA1AE57E2A0018489A /* Main.xib in Resources */ = {isa = PBXBuildFile; fileRef = B62DFFD91AE57E2A0018489A /* Main.xib */; };
17 | B65832AD1ACDBB3800B781E2 /* ITSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = B65832AC1ACDBB3800B781E2 /* ITSwitch.m */; };
18 | B66000D41ADC393D00C18BB9 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = B66000D31ADC393D00C18BB9 /* LICENSE */; };
19 | B67E1D5A1AC68578003FA730 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = B67E1D591AC68578003FA730 /* AppDelegate.m */; };
20 | B67E1D5C1AC68578003FA730 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = B67E1D5B1AC68578003FA730 /* main.m */; };
21 | B67E1D5F1AC68578003FA730 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B67E1D5E1AC68578003FA730 /* ViewController.m */; };
22 | B67E1D611AC68578003FA730 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B67E1D601AC68578003FA730 /* Images.xcassets */; };
23 | B67E1D701AC68578003FA730 /* LoLKRTests.m in Sources */ = {isa = PBXBuildFile; fileRef = B67E1D6F1AC68578003FA730 /* LoLKRTests.m */; };
24 | B69F06A21AD735B2005802FA /* update.sh in Resources */ = {isa = PBXBuildFile; fileRef = B69F06A11AD735B2005802FA /* update.sh */; };
25 | B6F35B411AD9C2DD00DED4C8 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = B6F35B401AD9C2DD00DED4C8 /* Credits.rtf */; };
26 | B6F35B441AD9C4D100DED4C8 /* ConfigViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B6F35B431AD9C4D100DED4C8 /* ConfigViewController.m */; };
27 | B6FE8E891ADFF84C00F0C7E3 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = B6FE8E881ADFF84C00F0C7E3 /* dsa_pub.pem */; };
28 | /* End PBXBuildFile section */
29 |
30 | /* Begin PBXContainerItemProxy section */
31 | B67E1D6A1AC68578003FA730 /* PBXContainerItemProxy */ = {
32 | isa = PBXContainerItemProxy;
33 | containerPortal = B67E1D4B1AC68578003FA730 /* Project object */;
34 | proxyType = 1;
35 | remoteGlobalIDString = B67E1D521AC68578003FA730;
36 | remoteInfo = LoLKR;
37 | };
38 | /* End PBXContainerItemProxy section */
39 |
40 | /* Begin PBXCopyFilesBuildPhase section */
41 | B60E118F1C952D490022EDCF /* Embed Frameworks */ = {
42 | isa = PBXCopyFilesBuildPhase;
43 | buildActionMask = 2147483647;
44 | dstPath = "";
45 | dstSubfolderSpec = 10;
46 | files = (
47 | B60E118E1C952D480022EDCF /* Sparkle.framework in Embed Frameworks */,
48 | );
49 | name = "Embed Frameworks";
50 | runOnlyForDeploymentPostprocessing = 0;
51 | };
52 | /* End PBXCopyFilesBuildPhase section */
53 |
54 | /* Begin PBXFileReference section */
55 | 08ADF3F2B1BE18C3FA711AC7 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; };
56 | 2C10437A67E8042E60E47DB9 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; };
57 | 450107DDDFF60139139CA600 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; };
58 | B60AFEA01ADBED72008A6547 /* README.md */ = {isa = PBXFileReference; explicitFileType = net.daringfireball.markdown; fileEncoding = 4; path = README.md; sourceTree = ""; };
59 | B60E118B1C95202F0022EDCF /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Pods/Sparkle/Sparkle.framework; sourceTree = ""; };
60 | B61B57FC1AD69DB7006558AA /* 1_nginx.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = 1_nginx.sh; sourceTree = ""; };
61 | B61B57FE1AD6A0EB006558AA /* 2_download_versions.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = 2_download_versions.sh; sourceTree = ""; };
62 | B61B58001AD6A6B2006558AA /* 3_lol.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = 3_lol.sh; sourceTree = ""; };
63 | B62DFFD91AE57E2A0018489A /* Main.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Main.xib; sourceTree = ""; };
64 | B62DFFDB1AE59AAB0018489A /* updates.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = updates.xml; sourceTree = ""; };
65 | B65832AB1ACDBB3800B781E2 /* ITSwitch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ITSwitch.h; sourceTree = ""; };
66 | B65832AC1ACDBB3800B781E2 /* ITSwitch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ITSwitch.m; sourceTree = ""; };
67 | B66000D31ADC393D00C18BB9 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
68 | B67E1D531AC68578003FA730 /* 롤 한국 서버 패치.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "롤 한국 서버 패치.app"; sourceTree = BUILT_PRODUCTS_DIR; };
69 | B67E1D571AC68578003FA730 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
70 | B67E1D581AC68578003FA730 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
71 | B67E1D591AC68578003FA730 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
72 | B67E1D5B1AC68578003FA730 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
73 | B67E1D5D1AC68578003FA730 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; };
74 | B67E1D5E1AC68578003FA730 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; };
75 | B67E1D601AC68578003FA730 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; };
76 | B67E1D691AC68578003FA730 /* LoLKRTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LoLKRTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
77 | B67E1D6E1AC68578003FA730 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
78 | B67E1D6F1AC68578003FA730 /* LoLKRTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LoLKRTests.m; sourceTree = ""; };
79 | B69F06A11AD735B2005802FA /* update.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = update.sh; sourceTree = ""; };
80 | B6F35B401AD9C2DD00DED4C8 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; };
81 | B6F35B421AD9C4D100DED4C8 /* ConfigViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConfigViewController.h; sourceTree = ""; };
82 | B6F35B431AD9C4D100DED4C8 /* ConfigViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConfigViewController.m; sourceTree = ""; };
83 | B6FE8E881ADFF84C00F0C7E3 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; };
84 | /* End PBXFileReference section */
85 |
86 | /* Begin PBXFrameworksBuildPhase section */
87 | B67E1D501AC68578003FA730 /* Frameworks */ = {
88 | isa = PBXFrameworksBuildPhase;
89 | buildActionMask = 2147483647;
90 | files = (
91 | B386F99F263A1A9AE38AE082 /* libPods.a in Frameworks */,
92 | B60E118D1C952D480022EDCF /* Sparkle.framework in Frameworks */,
93 | );
94 | runOnlyForDeploymentPostprocessing = 0;
95 | };
96 | B67E1D661AC68578003FA730 /* Frameworks */ = {
97 | isa = PBXFrameworksBuildPhase;
98 | buildActionMask = 2147483647;
99 | files = (
100 | );
101 | runOnlyForDeploymentPostprocessing = 0;
102 | };
103 | /* End PBXFrameworksBuildPhase section */
104 |
105 | /* Begin PBXGroup section */
106 | 9040D2FE732414D2DBEF2054 /* Pods */ = {
107 | isa = PBXGroup;
108 | children = (
109 | 2C10437A67E8042E60E47DB9 /* Pods.debug.xcconfig */,
110 | 450107DDDFF60139139CA600 /* Pods.release.xcconfig */,
111 | );
112 | name = Pods;
113 | sourceTree = "";
114 | };
115 | B61B57FB1AD69DA3006558AA /* scripts */ = {
116 | isa = PBXGroup;
117 | children = (
118 | B61B57FC1AD69DB7006558AA /* 1_nginx.sh */,
119 | B61B57FE1AD6A0EB006558AA /* 2_download_versions.sh */,
120 | B61B58001AD6A6B2006558AA /* 3_lol.sh */,
121 | B69F06A11AD735B2005802FA /* update.sh */,
122 | );
123 | name = scripts;
124 | sourceTree = "";
125 | };
126 | B65832AA1ACDBB2F00B781E2 /* ITSwitch */ = {
127 | isa = PBXGroup;
128 | children = (
129 | B65832AB1ACDBB3800B781E2 /* ITSwitch.h */,
130 | B65832AC1ACDBB3800B781E2 /* ITSwitch.m */,
131 | );
132 | name = ITSwitch;
133 | sourceTree = "";
134 | };
135 | B67E1D4A1AC68578003FA730 = {
136 | isa = PBXGroup;
137 | children = (
138 | B62DFFDB1AE59AAB0018489A /* updates.xml */,
139 | B66000D31ADC393D00C18BB9 /* LICENSE */,
140 | B60AFEA01ADBED72008A6547 /* README.md */,
141 | B67E1D551AC68578003FA730 /* LoLKR */,
142 | B67E1D6C1AC68578003FA730 /* LoLKRTests */,
143 | B67E1D541AC68578003FA730 /* Products */,
144 | 9040D2FE732414D2DBEF2054 /* Pods */,
145 | CC3FC6C2389B3786836051F4 /* Frameworks */,
146 | );
147 | sourceTree = "";
148 | };
149 | B67E1D541AC68578003FA730 /* Products */ = {
150 | isa = PBXGroup;
151 | children = (
152 | B67E1D531AC68578003FA730 /* 롤 한국 서버 패치.app */,
153 | B67E1D691AC68578003FA730 /* LoLKRTests.xctest */,
154 | );
155 | name = Products;
156 | sourceTree = "";
157 | };
158 | B67E1D551AC68578003FA730 /* LoLKR */ = {
159 | isa = PBXGroup;
160 | children = (
161 | B65832AA1ACDBB2F00B781E2 /* ITSwitch */,
162 | B67E1D581AC68578003FA730 /* AppDelegate.h */,
163 | B67E1D591AC68578003FA730 /* AppDelegate.m */,
164 | B67E1D5D1AC68578003FA730 /* ViewController.h */,
165 | B67E1D5E1AC68578003FA730 /* ViewController.m */,
166 | B6F35B421AD9C4D100DED4C8 /* ConfigViewController.h */,
167 | B6F35B431AD9C4D100DED4C8 /* ConfigViewController.m */,
168 | B67E1D601AC68578003FA730 /* Images.xcassets */,
169 | B62DFFD91AE57E2A0018489A /* Main.xib */,
170 | B67E1D561AC68578003FA730 /* Supporting Files */,
171 | );
172 | path = LoLKR;
173 | sourceTree = "";
174 | };
175 | B67E1D561AC68578003FA730 /* Supporting Files */ = {
176 | isa = PBXGroup;
177 | children = (
178 | B61B57FB1AD69DA3006558AA /* scripts */,
179 | B67E1D571AC68578003FA730 /* Info.plist */,
180 | B6FE8E881ADFF84C00F0C7E3 /* dsa_pub.pem */,
181 | B67E1D5B1AC68578003FA730 /* main.m */,
182 | B6F35B401AD9C2DD00DED4C8 /* Credits.rtf */,
183 | );
184 | name = "Supporting Files";
185 | sourceTree = "";
186 | };
187 | B67E1D6C1AC68578003FA730 /* LoLKRTests */ = {
188 | isa = PBXGroup;
189 | children = (
190 | B67E1D6F1AC68578003FA730 /* LoLKRTests.m */,
191 | B67E1D6D1AC68578003FA730 /* Supporting Files */,
192 | );
193 | path = LoLKRTests;
194 | sourceTree = "";
195 | };
196 | B67E1D6D1AC68578003FA730 /* Supporting Files */ = {
197 | isa = PBXGroup;
198 | children = (
199 | B67E1D6E1AC68578003FA730 /* Info.plist */,
200 | );
201 | name = "Supporting Files";
202 | sourceTree = "";
203 | };
204 | CC3FC6C2389B3786836051F4 /* Frameworks */ = {
205 | isa = PBXGroup;
206 | children = (
207 | B60E118B1C95202F0022EDCF /* Sparkle.framework */,
208 | 08ADF3F2B1BE18C3FA711AC7 /* libPods.a */,
209 | );
210 | name = Frameworks;
211 | sourceTree = "";
212 | };
213 | /* End PBXGroup section */
214 |
215 | /* Begin PBXNativeTarget section */
216 | B67E1D521AC68578003FA730 /* LoLKR */ = {
217 | isa = PBXNativeTarget;
218 | buildConfigurationList = B67E1D731AC68578003FA730 /* Build configuration list for PBXNativeTarget "LoLKR" */;
219 | buildPhases = (
220 | 6F542155D9C57AEB94942905 /* Check Pods Manifest.lock */,
221 | B67E1D4F1AC68578003FA730 /* Sources */,
222 | B67E1D501AC68578003FA730 /* Frameworks */,
223 | B67E1D511AC68578003FA730 /* Resources */,
224 | 1A38A10BD7AD76A6B9BDD7D5 /* Copy Pods Resources */,
225 | B60E118F1C952D490022EDCF /* Embed Frameworks */,
226 | B622A3471B076E82007D1755 /* ShellScript */,
227 | A7663C9FBCE051AEAB373D5B /* Embed Pods Frameworks */,
228 | );
229 | buildRules = (
230 | );
231 | dependencies = (
232 | );
233 | name = LoLKR;
234 | productName = LoLKR;
235 | productReference = B67E1D531AC68578003FA730 /* 롤 한국 서버 패치.app */;
236 | productType = "com.apple.product-type.application";
237 | };
238 | B67E1D681AC68578003FA730 /* LoLKRTests */ = {
239 | isa = PBXNativeTarget;
240 | buildConfigurationList = B67E1D761AC68578003FA730 /* Build configuration list for PBXNativeTarget "LoLKRTests" */;
241 | buildPhases = (
242 | B67E1D651AC68578003FA730 /* Sources */,
243 | B67E1D661AC68578003FA730 /* Frameworks */,
244 | B67E1D671AC68578003FA730 /* Resources */,
245 | );
246 | buildRules = (
247 | );
248 | dependencies = (
249 | B67E1D6B1AC68578003FA730 /* PBXTargetDependency */,
250 | );
251 | name = LoLKRTests;
252 | productName = LoLKRTests;
253 | productReference = B67E1D691AC68578003FA730 /* LoLKRTests.xctest */;
254 | productType = "com.apple.product-type.bundle.unit-test";
255 | };
256 | /* End PBXNativeTarget section */
257 |
258 | /* Begin PBXProject section */
259 | B67E1D4B1AC68578003FA730 /* Project object */ = {
260 | isa = PBXProject;
261 | attributes = {
262 | KnownAssetTags = (
263 | New,
264 | );
265 | LastUpgradeCheck = 0720;
266 | ORGANIZATIONNAME = "Jaesung Koo";
267 | TargetAttributes = {
268 | B67E1D521AC68578003FA730 = {
269 | CreatedOnToolsVersion = 6.2;
270 | DevelopmentTeam = F6U7JSUCV5;
271 | };
272 | B67E1D681AC68578003FA730 = {
273 | CreatedOnToolsVersion = 6.2;
274 | TestTargetID = B67E1D521AC68578003FA730;
275 | };
276 | };
277 | };
278 | buildConfigurationList = B67E1D4E1AC68578003FA730 /* Build configuration list for PBXProject "LoLKR" */;
279 | compatibilityVersion = "Xcode 3.2";
280 | developmentRegion = English;
281 | hasScannedForEncodings = 0;
282 | knownRegions = (
283 | en,
284 | Base,
285 | );
286 | mainGroup = B67E1D4A1AC68578003FA730;
287 | productRefGroup = B67E1D541AC68578003FA730 /* Products */;
288 | projectDirPath = "";
289 | projectRoot = "";
290 | targets = (
291 | B67E1D521AC68578003FA730 /* LoLKR */,
292 | B67E1D681AC68578003FA730 /* LoLKRTests */,
293 | );
294 | };
295 | /* End PBXProject section */
296 |
297 | /* Begin PBXResourcesBuildPhase section */
298 | B67E1D511AC68578003FA730 /* Resources */ = {
299 | isa = PBXResourcesBuildPhase;
300 | buildActionMask = 2147483647;
301 | files = (
302 | B61B57FD1AD69ECB006558AA /* 1_nginx.sh in Resources */,
303 | B69F06A21AD735B2005802FA /* update.sh in Resources */,
304 | B61B57FF1AD6A0EB006558AA /* 2_download_versions.sh in Resources */,
305 | B67E1D611AC68578003FA730 /* Images.xcassets in Resources */,
306 | B62DFFDA1AE57E2A0018489A /* Main.xib in Resources */,
307 | B6FE8E891ADFF84C00F0C7E3 /* dsa_pub.pem in Resources */,
308 | B6F35B411AD9C2DD00DED4C8 /* Credits.rtf in Resources */,
309 | B66000D41ADC393D00C18BB9 /* LICENSE in Resources */,
310 | B61B58011AD6A6B2006558AA /* 3_lol.sh in Resources */,
311 | );
312 | runOnlyForDeploymentPostprocessing = 0;
313 | };
314 | B67E1D671AC68578003FA730 /* Resources */ = {
315 | isa = PBXResourcesBuildPhase;
316 | buildActionMask = 2147483647;
317 | files = (
318 | );
319 | runOnlyForDeploymentPostprocessing = 0;
320 | };
321 | /* End PBXResourcesBuildPhase section */
322 |
323 | /* Begin PBXShellScriptBuildPhase section */
324 | 1A38A10BD7AD76A6B9BDD7D5 /* Copy Pods Resources */ = {
325 | isa = PBXShellScriptBuildPhase;
326 | buildActionMask = 2147483647;
327 | files = (
328 | );
329 | inputPaths = (
330 | );
331 | name = "Copy Pods Resources";
332 | outputPaths = (
333 | );
334 | runOnlyForDeploymentPostprocessing = 0;
335 | shellPath = /bin/sh;
336 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n";
337 | showEnvVarsInLog = 0;
338 | };
339 | 6F542155D9C57AEB94942905 /* Check Pods Manifest.lock */ = {
340 | isa = PBXShellScriptBuildPhase;
341 | buildActionMask = 2147483647;
342 | files = (
343 | );
344 | inputPaths = (
345 | );
346 | name = "Check Pods Manifest.lock";
347 | outputPaths = (
348 | );
349 | runOnlyForDeploymentPostprocessing = 0;
350 | shellPath = /bin/sh;
351 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n";
352 | showEnvVarsInLog = 0;
353 | };
354 | A7663C9FBCE051AEAB373D5B /* Embed Pods Frameworks */ = {
355 | isa = PBXShellScriptBuildPhase;
356 | buildActionMask = 2147483647;
357 | files = (
358 | );
359 | inputPaths = (
360 | );
361 | name = "Embed Pods Frameworks";
362 | outputPaths = (
363 | );
364 | runOnlyForDeploymentPostprocessing = 0;
365 | shellPath = /bin/sh;
366 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-frameworks.sh\"\n";
367 | showEnvVarsInLog = 0;
368 | };
369 | B622A3471B076E82007D1755 /* ShellScript */ = {
370 | isa = PBXShellScriptBuildPhase;
371 | buildActionMask = 2147483647;
372 | files = (
373 | );
374 | inputPaths = (
375 | );
376 | outputPaths = (
377 | );
378 | runOnlyForDeploymentPostprocessing = 0;
379 | shellPath = /bin/sh;
380 | shellScript = "LOCATION=\"${BUILT_PRODUCTS_DIR}\"/\"${FRAMEWORKS_FOLDER_PATH}\"\n\n# Usually set by Xcode\nCODE_SIGN_IDENTITY=\"Mac Developer: Jaesung Koo (JX3RHMUU32)\"\n\ncodesign --verbose --force --sign \"$CODE_SIGN_IDENTITY\" \"$LOCATION/Sparkle.framework/Versions/A\"";
381 | showEnvVarsInLog = 0;
382 | };
383 | /* End PBXShellScriptBuildPhase section */
384 |
385 | /* Begin PBXSourcesBuildPhase section */
386 | B67E1D4F1AC68578003FA730 /* Sources */ = {
387 | isa = PBXSourcesBuildPhase;
388 | buildActionMask = 2147483647;
389 | files = (
390 | B65832AD1ACDBB3800B781E2 /* ITSwitch.m in Sources */,
391 | B67E1D5F1AC68578003FA730 /* ViewController.m in Sources */,
392 | B67E1D5C1AC68578003FA730 /* main.m in Sources */,
393 | B67E1D5A1AC68578003FA730 /* AppDelegate.m in Sources */,
394 | B6F35B441AD9C4D100DED4C8 /* ConfigViewController.m in Sources */,
395 | );
396 | runOnlyForDeploymentPostprocessing = 0;
397 | };
398 | B67E1D651AC68578003FA730 /* Sources */ = {
399 | isa = PBXSourcesBuildPhase;
400 | buildActionMask = 2147483647;
401 | files = (
402 | B67E1D701AC68578003FA730 /* LoLKRTests.m in Sources */,
403 | );
404 | runOnlyForDeploymentPostprocessing = 0;
405 | };
406 | /* End PBXSourcesBuildPhase section */
407 |
408 | /* Begin PBXTargetDependency section */
409 | B67E1D6B1AC68578003FA730 /* PBXTargetDependency */ = {
410 | isa = PBXTargetDependency;
411 | target = B67E1D521AC68578003FA730 /* LoLKR */;
412 | targetProxy = B67E1D6A1AC68578003FA730 /* PBXContainerItemProxy */;
413 | };
414 | /* End PBXTargetDependency section */
415 |
416 | /* Begin XCBuildConfiguration section */
417 | B67E1D711AC68578003FA730 /* Debug */ = {
418 | isa = XCBuildConfiguration;
419 | buildSettings = {
420 | ALWAYS_SEARCH_USER_PATHS = NO;
421 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
422 | CLANG_CXX_LIBRARY = "libc++";
423 | CLANG_ENABLE_MODULES = YES;
424 | CLANG_ENABLE_OBJC_ARC = YES;
425 | CLANG_WARN_BOOL_CONVERSION = YES;
426 | CLANG_WARN_CONSTANT_CONVERSION = YES;
427 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
428 | CLANG_WARN_EMPTY_BODY = YES;
429 | CLANG_WARN_ENUM_CONVERSION = YES;
430 | CLANG_WARN_INT_CONVERSION = YES;
431 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
432 | CLANG_WARN_UNREACHABLE_CODE = YES;
433 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
434 | CODE_SIGN_IDENTITY = "-";
435 | COPY_PHASE_STRIP = NO;
436 | ENABLE_STRICT_OBJC_MSGSEND = YES;
437 | ENABLE_TESTABILITY = YES;
438 | GCC_C_LANGUAGE_STANDARD = gnu99;
439 | GCC_DYNAMIC_NO_PIC = NO;
440 | GCC_OPTIMIZATION_LEVEL = 0;
441 | GCC_PREPROCESSOR_DEFINITIONS = (
442 | "DEBUG=1",
443 | "$(inherited)",
444 | );
445 | GCC_SYMBOLS_PRIVATE_EXTERN = NO;
446 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
447 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
448 | GCC_WARN_UNDECLARED_SELECTOR = YES;
449 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
450 | GCC_WARN_UNUSED_FUNCTION = YES;
451 | GCC_WARN_UNUSED_VARIABLE = YES;
452 | MACOSX_DEPLOYMENT_TARGET = 10.10;
453 | MTL_ENABLE_DEBUG_INFO = YES;
454 | ONLY_ACTIVE_ARCH = YES;
455 | SDKROOT = macosx;
456 | };
457 | name = Debug;
458 | };
459 | B67E1D721AC68578003FA730 /* Release */ = {
460 | isa = XCBuildConfiguration;
461 | buildSettings = {
462 | ALWAYS_SEARCH_USER_PATHS = NO;
463 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
464 | CLANG_CXX_LIBRARY = "libc++";
465 | CLANG_ENABLE_MODULES = YES;
466 | CLANG_ENABLE_OBJC_ARC = YES;
467 | CLANG_WARN_BOOL_CONVERSION = YES;
468 | CLANG_WARN_CONSTANT_CONVERSION = YES;
469 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
470 | CLANG_WARN_EMPTY_BODY = YES;
471 | CLANG_WARN_ENUM_CONVERSION = YES;
472 | CLANG_WARN_INT_CONVERSION = YES;
473 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
474 | CLANG_WARN_UNREACHABLE_CODE = YES;
475 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
476 | CODE_SIGN_IDENTITY = "-";
477 | COPY_PHASE_STRIP = NO;
478 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
479 | ENABLE_NS_ASSERTIONS = NO;
480 | ENABLE_STRICT_OBJC_MSGSEND = YES;
481 | GCC_C_LANGUAGE_STANDARD = gnu99;
482 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
483 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
484 | GCC_WARN_UNDECLARED_SELECTOR = YES;
485 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
486 | GCC_WARN_UNUSED_FUNCTION = YES;
487 | GCC_WARN_UNUSED_VARIABLE = YES;
488 | MACOSX_DEPLOYMENT_TARGET = 10.10;
489 | MTL_ENABLE_DEBUG_INFO = NO;
490 | SDKROOT = macosx;
491 | };
492 | name = Release;
493 | };
494 | B67E1D741AC68578003FA730 /* Debug */ = {
495 | isa = XCBuildConfiguration;
496 | baseConfigurationReference = 2C10437A67E8042E60E47DB9 /* Pods.debug.xcconfig */;
497 | buildSettings = {
498 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
499 | CODE_SIGN_IDENTITY = "Mac Developer";
500 | COMBINE_HIDPI_IMAGES = YES;
501 | FRAMEWORK_SEARCH_PATHS = (
502 | "$(inherited)",
503 | "$(PROJECT_DIR)/Pods/Sparkle",
504 | );
505 | INFOPLIST_FILE = LoLKR/Info.plist;
506 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
507 | MACOSX_DEPLOYMENT_TARGET = 10.9;
508 | PRODUCT_BUNDLE_IDENTIFIER = koo.jasesung.lolkr;
509 | PRODUCT_NAME = "롤 한국 서버 패치";
510 | SDKROOT = macosx;
511 | };
512 | name = Debug;
513 | };
514 | B67E1D751AC68578003FA730 /* Release */ = {
515 | isa = XCBuildConfiguration;
516 | baseConfigurationReference = 450107DDDFF60139139CA600 /* Pods.release.xcconfig */;
517 | buildSettings = {
518 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
519 | CODE_SIGN_IDENTITY = "Mac Developer";
520 | COMBINE_HIDPI_IMAGES = YES;
521 | FRAMEWORK_SEARCH_PATHS = (
522 | "$(inherited)",
523 | "$(PROJECT_DIR)/Pods/Sparkle",
524 | );
525 | INFOPLIST_FILE = LoLKR/Info.plist;
526 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
527 | MACOSX_DEPLOYMENT_TARGET = 10.9;
528 | PRODUCT_BUNDLE_IDENTIFIER = koo.jasesung.lolkr;
529 | PRODUCT_NAME = "롤 한국 서버 패치";
530 | SDKROOT = macosx;
531 | };
532 | name = Release;
533 | };
534 | B67E1D771AC68578003FA730 /* Debug */ = {
535 | isa = XCBuildConfiguration;
536 | buildSettings = {
537 | BUNDLE_LOADER = "$(TEST_HOST)";
538 | COMBINE_HIDPI_IMAGES = YES;
539 | FRAMEWORK_SEARCH_PATHS = (
540 | "$(DEVELOPER_FRAMEWORKS_DIR)",
541 | "$(inherited)",
542 | );
543 | GCC_PREPROCESSOR_DEFINITIONS = (
544 | "DEBUG=1",
545 | "$(inherited)",
546 | );
547 | INFOPLIST_FILE = LoLKRTests/Info.plist;
548 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
549 | MACOSX_DEPLOYMENT_TARGET = 10.9;
550 | PRODUCT_BUNDLE_IDENTIFIER = "koo.jasesung.$(PRODUCT_NAME:rfc1034identifier)";
551 | PRODUCT_NAME = "$(TARGET_NAME)";
552 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/롤 한국 서버 패치.app/Contents/MacOS/롤 한국 서버 패치";
553 | };
554 | name = Debug;
555 | };
556 | B67E1D781AC68578003FA730 /* Release */ = {
557 | isa = XCBuildConfiguration;
558 | buildSettings = {
559 | BUNDLE_LOADER = "$(TEST_HOST)";
560 | COMBINE_HIDPI_IMAGES = YES;
561 | FRAMEWORK_SEARCH_PATHS = (
562 | "$(DEVELOPER_FRAMEWORKS_DIR)",
563 | "$(inherited)",
564 | );
565 | INFOPLIST_FILE = LoLKRTests/Info.plist;
566 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
567 | MACOSX_DEPLOYMENT_TARGET = 10.9;
568 | PRODUCT_BUNDLE_IDENTIFIER = "koo.jasesung.$(PRODUCT_NAME:rfc1034identifier)";
569 | PRODUCT_NAME = "$(TARGET_NAME)";
570 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/롤 한국 서버 패치.app/Contents/MacOS/롤 한국 서버 패치";
571 | };
572 | name = Release;
573 | };
574 | /* End XCBuildConfiguration section */
575 |
576 | /* Begin XCConfigurationList section */
577 | B67E1D4E1AC68578003FA730 /* Build configuration list for PBXProject "LoLKR" */ = {
578 | isa = XCConfigurationList;
579 | buildConfigurations = (
580 | B67E1D711AC68578003FA730 /* Debug */,
581 | B67E1D721AC68578003FA730 /* Release */,
582 | );
583 | defaultConfigurationIsVisible = 0;
584 | defaultConfigurationName = Release;
585 | };
586 | B67E1D731AC68578003FA730 /* Build configuration list for PBXNativeTarget "LoLKR" */ = {
587 | isa = XCConfigurationList;
588 | buildConfigurations = (
589 | B67E1D741AC68578003FA730 /* Debug */,
590 | B67E1D751AC68578003FA730 /* Release */,
591 | );
592 | defaultConfigurationIsVisible = 0;
593 | defaultConfigurationName = Release;
594 | };
595 | B67E1D761AC68578003FA730 /* Build configuration list for PBXNativeTarget "LoLKRTests" */ = {
596 | isa = XCConfigurationList;
597 | buildConfigurations = (
598 | B67E1D771AC68578003FA730 /* Debug */,
599 | B67E1D781AC68578003FA730 /* Release */,
600 | );
601 | defaultConfigurationIsVisible = 0;
602 | defaultConfigurationName = Release;
603 | };
604 | /* End XCConfigurationList section */
605 | };
606 | rootObject = B67E1D4B1AC68578003FA730 /* Project object */;
607 | }
608 |
--------------------------------------------------------------------------------
/LoLKR/Main.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 | app
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
358 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
--------------------------------------------------------------------------------