macOSのスクリーンショットの保存場所を変更するメニュバーエクストラ
Revision | 3c821ea2544a20c1612860ee46a9b7c2d21efea2 (tree) |
---|---|
Time | 2017-04-23 11:39:05 |
Author | masakih <masakih@user...> |
Commiter | masakih |
UserDefaultsにRecentFolderを保存できるようにした
@@ -13,7 +13,9 @@ | ||
13 | 13 | F40EB6CA1EA1D7B500FEE444 /* ImageType.plist in Resources */ = {isa = PBXBuildFile; fileRef = F40EB6C91EA1D7B500FEE444 /* ImageType.plist */; }; |
14 | 14 | F40EB6D01EA26BEC00FEE444 /* ActionListener.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6CF1EA26BEC00FEE444 /* ActionListener.swift */; }; |
15 | 15 | F40EB6D21EA2F28100FEE444 /* Screenshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = F40EB6D11EA2F28100FEE444 /* Screenshot.swift */; }; |
16 | + F414DD031EABAB7300111DA7 /* UserDefaultsExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD021EABAB7300111DA7 /* UserDefaultsExtension.swift */; }; | |
16 | 17 | F414DD051EAC12D500111DA7 /* FolderItemSerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD041EAC12D500111DA7 /* FolderItemSerializer.swift */; }; |
18 | + F414DD071EAC43E500111DA7 /* UserDefaultsTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */; }; | |
17 | 19 | F463F6D91EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */; }; |
18 | 20 | F463F6DB1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F463F6DA1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift */; }; |
19 | 21 | F47B06EB1E9A5DF9006711D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */; }; |
@@ -48,7 +50,9 @@ | ||
48 | 50 | F40EB6C91EA1D7B500FEE444 /* ImageType.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ImageType.plist; sourceTree = "<group>"; }; |
49 | 51 | F40EB6CF1EA26BEC00FEE444 /* ActionListener.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionListener.swift; sourceTree = "<group>"; }; |
50 | 52 | F40EB6D11EA2F28100FEE444 /* Screenshot.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Screenshot.swift; sourceTree = "<group>"; }; |
53 | + F414DD021EABAB7300111DA7 /* UserDefaultsExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsExtension.swift; sourceTree = "<group>"; }; | |
51 | 54 | F414DD041EAC12D500111DA7 /* FolderItemSerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FolderItemSerializer.swift; sourceTree = "<group>"; }; |
55 | + F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UserDefaultsTest.swift; sourceTree = "<group>"; }; | |
52 | 56 | F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitedArraySerializerTest.swift; sourceTree = "<group>"; }; |
53 | 57 | F463F6DA1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LimitedArraySerializer.swift; sourceTree = "<group>"; }; |
54 | 58 | F47B06E71E9A5DF9006711D9 /* GoInto.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GoInto.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
@@ -109,6 +113,7 @@ | ||
109 | 113 | children = ( |
110 | 114 | F47B07071E9A6071006711D9 /* MainMenu.xib */, |
111 | 115 | F47B06EA1E9A5DF9006711D9 /* AppDelegate.swift */, |
116 | + F414DD021EABAB7300111DA7 /* UserDefaultsExtension.swift */, | |
112 | 117 | F40EB6D11EA2F28100FEE444 /* Screenshot.swift */, |
113 | 118 | F47B070D1E9A6E55006711D9 /* StatusBar.swift */, |
114 | 119 | F47B070B1E9A65FA006711D9 /* StatusItem.swift */, |
@@ -135,6 +140,7 @@ | ||
135 | 140 | children = ( |
136 | 141 | F4DBE9271EA7864B00CEB984 /* LimitedArrayTest.swift */, |
137 | 142 | F463F6D81EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift */, |
143 | + F414DD061EAC43E500111DA7 /* UserDefaultsTest.swift */, | |
138 | 144 | F47B06FC1E9A5DF9006711D9 /* GoIntoTests.swift */, |
139 | 145 | F47B06FE1E9A5DF9006711D9 /* Info.plist */, |
140 | 146 | ); |
@@ -257,6 +263,7 @@ | ||
257 | 263 | F47B070E1E9A6E55006711D9 /* StatusBar.swift in Sources */, |
258 | 264 | F463F6DB1EAA3C9700FAB2E3 /* LimitedArraySerializer.swift in Sources */, |
259 | 265 | F4D346941EA644170031AFB3 /* LimitedArray.swift in Sources */, |
266 | + F414DD031EABAB7300111DA7 /* UserDefaultsExtension.swift in Sources */, | |
260 | 267 | F47B07121EA10A3E006711D9 /* ChooseFolderItem.swift in Sources */, |
261 | 268 | F414DD051EAC12D500111DA7 /* FolderItemSerializer.swift in Sources */, |
262 | 269 | ); |
@@ -266,6 +273,7 @@ | ||
266 | 273 | isa = PBXSourcesBuildPhase; |
267 | 274 | buildActionMask = 2147483647; |
268 | 275 | files = ( |
276 | + F414DD071EAC43E500111DA7 /* UserDefaultsTest.swift in Sources */, | |
269 | 277 | F4DBE9281EA7864B00CEB984 /* LimitedArrayTest.swift in Sources */, |
270 | 278 | F463F6D91EAA3B8F00FAB2E3 /* LimitedArraySerializerTest.swift in Sources */, |
271 | 279 | F47B06FD1E9A5DF9006711D9 /* GoIntoTests.swift in Sources */, |
@@ -26,7 +26,8 @@ | ||
26 | 26 | buildConfiguration = "Debug" |
27 | 27 | selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" |
28 | 28 | selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" |
29 | - shouldUseLaunchSchemeArgsEnv = "YES"> | |
29 | + shouldUseLaunchSchemeArgsEnv = "YES" | |
30 | + codeCoverageEnabled = "YES"> | |
30 | 31 | <Testables> |
31 | 32 | <TestableReference |
32 | 33 | skipped = "NO"> |
@@ -0,0 +1,24 @@ | ||
1 | +// | |
2 | +// UserDefaultsExtension.swift | |
3 | +// GoInto | |
4 | +// | |
5 | +// Created by Hori,Masaki on 2017/04/23. | |
6 | +// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import Foundation | |
10 | + | |
11 | +extension UserDefaults { | |
12 | + var recentFolders: LimitedArray<FolderItem>? { | |
13 | + get { | |
14 | + guard let data = object(forKey: "recentFolders") as? Data, | |
15 | + let serialized: LimitedArray<FolderItem> = LimitedArraySerializer.deserialize(data) | |
16 | + else { return nil } | |
17 | + return serialized | |
18 | + } | |
19 | + set { | |
20 | + let data = newValue.map { LimitedArraySerializer.seirialize($0) } | |
21 | + set(data, forKey: "recentFolders") | |
22 | + } | |
23 | + } | |
24 | +} |
@@ -0,0 +1,30 @@ | ||
1 | +// | |
2 | +// UserDefaultsTest.swift | |
3 | +// GoInto | |
4 | +// | |
5 | +// Created by Hori,Masaki on 2017/04/23. | |
6 | +// Copyright © 2017年 Hori,Masaki. All rights reserved. | |
7 | +// | |
8 | + | |
9 | +import XCTest | |
10 | + | |
11 | +@testable import GoInto | |
12 | + | |
13 | +class UserDefaultsTest: XCTestCase { | |
14 | + | |
15 | + func testRecentFolders() { | |
16 | + var limited = LimitedArray<FolderItem>(3) | |
17 | + limited.append(FolderItem(URL(fileURLWithPath: "/System/"))) | |
18 | + limited.append(FolderItem(URL(fileURLWithPath: "/Users/"))) | |
19 | + limited.append(FolderItem(URL(fileURLWithPath: "/var/"))) | |
20 | + | |
21 | + UserDefaults.standard.recentFolders = limited | |
22 | + | |
23 | + let storedData = UserDefaults.standard.recentFolders | |
24 | + XCTAssertNotNil(storedData) | |
25 | + guard let stored = storedData else { return } | |
26 | + | |
27 | + XCTAssertEqual(limited.array, stored.array) | |
28 | + XCTAssertEqual(limited.size, stored.size) | |
29 | + } | |
30 | +} |