Skip to content

Commit b434a28

Browse files
committed
first commit to github
1 parent 5e1a9b8 commit b434a28

File tree

33 files changed

+946
-1
lines changed

33 files changed

+946
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
.DS_Store

Icon/1024x1024.png

1.2 MB
Loading

Icon/128x128.png

37.5 KB
Loading

Icon/16x16.png

2.77 KB
Loading

Icon/256x256.png

119 KB
Loading

Icon/32x32.png

4.78 KB
Loading

Icon/512x512.png

383 KB
Loading

Icon/64x64.png

12.1 KB
Loading

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,16 @@
11
# imageviewer5
2-
Simple fast image viewer for macOS
2+
Simple and fast image viewer for macOS written with Swift and Swift UI
3+
4+
When I switched to macOS, I missed [Irfanview](https://www.irfanview.com) from Windows. I wanted a Mac app to quickly go through images in a folder by hitting left and right arrow keys, and also be able to copy the images to paste in another folder or in a document.
5+
6+
_imageviewer5_ does this.
7+
8+
## Features
9+
10+
- Navigate images in a folder by hitting left/right arrow
11+
- Copy image by hitting ⌘C
12+
- Copy path to image by hitting ⌥⌘C
13+
- Open a image through the File > Open menu, Right clicking an image and using Open With or Drag an image onto the Dock icon
14+
- ...and that's it! Nice and simple, and fast.
15+
16+
![Wow](https://lambdan.se/img/2020-07-09_16-58-08.306847.png)
Lines changed: 376 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,376 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 50;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
6A1A3888249EC2A000389BB0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1A3887249EC2A000389BB0 /* AppDelegate.swift */; };
11+
6A1A388A249EC2A000389BB0 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1A3889249EC2A000389BB0 /* ContentView.swift */; };
12+
6A1A388C249EC2A200389BB0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A1A388B249EC2A200389BB0 /* Assets.xcassets */; };
13+
6A1A388F249EC2A200389BB0 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A1A388E249EC2A200389BB0 /* Preview Assets.xcassets */; };
14+
6A1A3892249EC2A200389BB0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 6A1A3890249EC2A200389BB0 /* Main.storyboard */; };
15+
6AED24C324B764110000595D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 6AED24C224B764110000595D /* Credits.rtf */; };
16+
/* End PBXBuildFile section */
17+
18+
/* Begin PBXFileReference section */
19+
6A1A3884249EC2A000389BB0 /* imageviewer5.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = imageviewer5.app; sourceTree = BUILT_PRODUCTS_DIR; };
20+
6A1A3887249EC2A000389BB0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
21+
6A1A3889249EC2A000389BB0 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
22+
6A1A388B249EC2A200389BB0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
23+
6A1A388E249EC2A200389BB0 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
24+
6A1A3891249EC2A200389BB0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
25+
6A1A3893249EC2A200389BB0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
26+
6A1A3894249EC2A200389BB0 /* imageviewer5.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = imageviewer5.entitlements; sourceTree = "<group>"; };
27+
6AED24C224B764110000595D /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = "<group>"; };
28+
/* End PBXFileReference section */
29+
30+
/* Begin PBXFrameworksBuildPhase section */
31+
6A1A3881249EC2A000389BB0 /* Frameworks */ = {
32+
isa = PBXFrameworksBuildPhase;
33+
buildActionMask = 2147483647;
34+
files = (
35+
);
36+
runOnlyForDeploymentPostprocessing = 0;
37+
};
38+
/* End PBXFrameworksBuildPhase section */
39+
40+
/* Begin PBXGroup section */
41+
6A1A387B249EC2A000389BB0 = {
42+
isa = PBXGroup;
43+
children = (
44+
6A1A3886249EC2A000389BB0 /* imageviewer5 */,
45+
6A1A3885249EC2A000389BB0 /* Products */,
46+
);
47+
sourceTree = "<group>";
48+
};
49+
6A1A3885249EC2A000389BB0 /* Products */ = {
50+
isa = PBXGroup;
51+
children = (
52+
6A1A3884249EC2A000389BB0 /* imageviewer5.app */,
53+
);
54+
name = Products;
55+
sourceTree = "<group>";
56+
};
57+
6A1A3886249EC2A000389BB0 /* imageviewer5 */ = {
58+
isa = PBXGroup;
59+
children = (
60+
6AED24C224B764110000595D /* Credits.rtf */,
61+
6A1A3887249EC2A000389BB0 /* AppDelegate.swift */,
62+
6A1A3889249EC2A000389BB0 /* ContentView.swift */,
63+
6A1A388B249EC2A200389BB0 /* Assets.xcassets */,
64+
6A1A3890249EC2A200389BB0 /* Main.storyboard */,
65+
6A1A3893249EC2A200389BB0 /* Info.plist */,
66+
6A1A3894249EC2A200389BB0 /* imageviewer5.entitlements */,
67+
6A1A388D249EC2A200389BB0 /* Preview Content */,
68+
);
69+
path = imageviewer5;
70+
sourceTree = "<group>";
71+
};
72+
6A1A388D249EC2A200389BB0 /* Preview Content */ = {
73+
isa = PBXGroup;
74+
children = (
75+
6A1A388E249EC2A200389BB0 /* Preview Assets.xcassets */,
76+
);
77+
path = "Preview Content";
78+
sourceTree = "<group>";
79+
};
80+
/* End PBXGroup section */
81+
82+
/* Begin PBXNativeTarget section */
83+
6A1A3883249EC2A000389BB0 /* imageviewer5 */ = {
84+
isa = PBXNativeTarget;
85+
buildConfigurationList = 6A1A3897249EC2A200389BB0 /* Build configuration list for PBXNativeTarget "imageviewer5" */;
86+
buildPhases = (
87+
6A1A3880249EC2A000389BB0 /* Sources */,
88+
6A1A3881249EC2A000389BB0 /* Frameworks */,
89+
6A1A3882249EC2A000389BB0 /* Resources */,
90+
6AED24C424B764560000595D /* Auto-increment build number */,
91+
);
92+
buildRules = (
93+
);
94+
dependencies = (
95+
);
96+
name = imageviewer5;
97+
productName = imageviewer5;
98+
productReference = 6A1A3884249EC2A000389BB0 /* imageviewer5.app */;
99+
productType = "com.apple.product-type.application";
100+
};
101+
/* End PBXNativeTarget section */
102+
103+
/* Begin PBXProject section */
104+
6A1A387C249EC2A000389BB0 /* Project object */ = {
105+
isa = PBXProject;
106+
attributes = {
107+
LastSwiftUpdateCheck = 1150;
108+
LastUpgradeCheck = 1150;
109+
ORGANIZATIONNAME = djs;
110+
TargetAttributes = {
111+
6A1A3883249EC2A000389BB0 = {
112+
CreatedOnToolsVersion = 11.5;
113+
};
114+
};
115+
};
116+
buildConfigurationList = 6A1A387F249EC2A000389BB0 /* Build configuration list for PBXProject "imageviewer5" */;
117+
compatibilityVersion = "Xcode 9.3";
118+
developmentRegion = en;
119+
hasScannedForEncodings = 0;
120+
knownRegions = (
121+
en,
122+
Base,
123+
);
124+
mainGroup = 6A1A387B249EC2A000389BB0;
125+
productRefGroup = 6A1A3885249EC2A000389BB0 /* Products */;
126+
projectDirPath = "";
127+
projectRoot = "";
128+
targets = (
129+
6A1A3883249EC2A000389BB0 /* imageviewer5 */,
130+
);
131+
};
132+
/* End PBXProject section */
133+
134+
/* Begin PBXResourcesBuildPhase section */
135+
6A1A3882249EC2A000389BB0 /* Resources */ = {
136+
isa = PBXResourcesBuildPhase;
137+
buildActionMask = 2147483647;
138+
files = (
139+
6A1A3892249EC2A200389BB0 /* Main.storyboard in Resources */,
140+
6A1A388F249EC2A200389BB0 /* Preview Assets.xcassets in Resources */,
141+
6A1A388C249EC2A200389BB0 /* Assets.xcassets in Resources */,
142+
6AED24C324B764110000595D /* Credits.rtf in Resources */,
143+
);
144+
runOnlyForDeploymentPostprocessing = 0;
145+
};
146+
/* End PBXResourcesBuildPhase section */
147+
148+
/* Begin PBXShellScriptBuildPhase section */
149+
6AED24C424B764560000595D /* Auto-increment build number */ = {
150+
isa = PBXShellScriptBuildPhase;
151+
buildActionMask = 2147483647;
152+
files = (
153+
);
154+
inputFileListPaths = (
155+
);
156+
inputPaths = (
157+
);
158+
name = "Auto-increment build number";
159+
outputFileListPaths = (
160+
);
161+
outputPaths = (
162+
);
163+
runOnlyForDeploymentPostprocessing = 0;
164+
shellPath = /bin/sh;
165+
shellScript = "buildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\")\nbuildNumber=$(($buildNumber + 1))\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n";
166+
};
167+
/* End PBXShellScriptBuildPhase section */
168+
169+
/* Begin PBXSourcesBuildPhase section */
170+
6A1A3880249EC2A000389BB0 /* Sources */ = {
171+
isa = PBXSourcesBuildPhase;
172+
buildActionMask = 2147483647;
173+
files = (
174+
6A1A388A249EC2A000389BB0 /* ContentView.swift in Sources */,
175+
6A1A3888249EC2A000389BB0 /* AppDelegate.swift in Sources */,
176+
);
177+
runOnlyForDeploymentPostprocessing = 0;
178+
};
179+
/* End PBXSourcesBuildPhase section */
180+
181+
/* Begin PBXVariantGroup section */
182+
6A1A3890249EC2A200389BB0 /* Main.storyboard */ = {
183+
isa = PBXVariantGroup;
184+
children = (
185+
6A1A3891249EC2A200389BB0 /* Base */,
186+
);
187+
name = Main.storyboard;
188+
sourceTree = "<group>";
189+
};
190+
/* End PBXVariantGroup section */
191+
192+
/* Begin XCBuildConfiguration section */
193+
6A1A3895249EC2A200389BB0 /* Debug */ = {
194+
isa = XCBuildConfiguration;
195+
buildSettings = {
196+
ALWAYS_SEARCH_USER_PATHS = NO;
197+
CLANG_ANALYZER_NONNULL = YES;
198+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
199+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
200+
CLANG_CXX_LIBRARY = "libc++";
201+
CLANG_ENABLE_MODULES = YES;
202+
CLANG_ENABLE_OBJC_ARC = YES;
203+
CLANG_ENABLE_OBJC_WEAK = YES;
204+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
205+
CLANG_WARN_BOOL_CONVERSION = YES;
206+
CLANG_WARN_COMMA = YES;
207+
CLANG_WARN_CONSTANT_CONVERSION = YES;
208+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
209+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
210+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
211+
CLANG_WARN_EMPTY_BODY = YES;
212+
CLANG_WARN_ENUM_CONVERSION = YES;
213+
CLANG_WARN_INFINITE_RECURSION = YES;
214+
CLANG_WARN_INT_CONVERSION = YES;
215+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
216+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
217+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
218+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
219+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
220+
CLANG_WARN_STRICT_PROTOTYPES = YES;
221+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
222+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
223+
CLANG_WARN_UNREACHABLE_CODE = YES;
224+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
225+
COPY_PHASE_STRIP = NO;
226+
DEBUG_INFORMATION_FORMAT = dwarf;
227+
ENABLE_STRICT_OBJC_MSGSEND = YES;
228+
ENABLE_TESTABILITY = YES;
229+
GCC_C_LANGUAGE_STANDARD = gnu11;
230+
GCC_DYNAMIC_NO_PIC = NO;
231+
GCC_NO_COMMON_BLOCKS = YES;
232+
GCC_OPTIMIZATION_LEVEL = 0;
233+
GCC_PREPROCESSOR_DEFINITIONS = (
234+
"DEBUG=1",
235+
"$(inherited)",
236+
);
237+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
238+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
239+
GCC_WARN_UNDECLARED_SELECTOR = YES;
240+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
241+
GCC_WARN_UNUSED_FUNCTION = YES;
242+
GCC_WARN_UNUSED_VARIABLE = YES;
243+
MACOSX_DEPLOYMENT_TARGET = 10.15;
244+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
245+
MTL_FAST_MATH = YES;
246+
ONLY_ACTIVE_ARCH = YES;
247+
SDKROOT = macosx;
248+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
249+
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
250+
};
251+
name = Debug;
252+
};
253+
6A1A3896249EC2A200389BB0 /* Release */ = {
254+
isa = XCBuildConfiguration;
255+
buildSettings = {
256+
ALWAYS_SEARCH_USER_PATHS = NO;
257+
CLANG_ANALYZER_NONNULL = YES;
258+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
259+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
260+
CLANG_CXX_LIBRARY = "libc++";
261+
CLANG_ENABLE_MODULES = YES;
262+
CLANG_ENABLE_OBJC_ARC = YES;
263+
CLANG_ENABLE_OBJC_WEAK = YES;
264+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
265+
CLANG_WARN_BOOL_CONVERSION = YES;
266+
CLANG_WARN_COMMA = YES;
267+
CLANG_WARN_CONSTANT_CONVERSION = YES;
268+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
269+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
270+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
271+
CLANG_WARN_EMPTY_BODY = YES;
272+
CLANG_WARN_ENUM_CONVERSION = YES;
273+
CLANG_WARN_INFINITE_RECURSION = YES;
274+
CLANG_WARN_INT_CONVERSION = YES;
275+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
276+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
277+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
278+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
279+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
280+
CLANG_WARN_STRICT_PROTOTYPES = YES;
281+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
282+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
283+
CLANG_WARN_UNREACHABLE_CODE = YES;
284+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
285+
COPY_PHASE_STRIP = NO;
286+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
287+
ENABLE_NS_ASSERTIONS = NO;
288+
ENABLE_STRICT_OBJC_MSGSEND = YES;
289+
GCC_C_LANGUAGE_STANDARD = gnu11;
290+
GCC_NO_COMMON_BLOCKS = YES;
291+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
292+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
293+
GCC_WARN_UNDECLARED_SELECTOR = YES;
294+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
295+
GCC_WARN_UNUSED_FUNCTION = YES;
296+
GCC_WARN_UNUSED_VARIABLE = YES;
297+
MACOSX_DEPLOYMENT_TARGET = 10.15;
298+
MTL_ENABLE_DEBUG_INFO = NO;
299+
MTL_FAST_MATH = YES;
300+
SDKROOT = macosx;
301+
SWIFT_COMPILATION_MODE = wholemodule;
302+
SWIFT_OPTIMIZATION_LEVEL = "-O";
303+
};
304+
name = Release;
305+
};
306+
6A1A3898249EC2A200389BB0 /* Debug */ = {
307+
isa = XCBuildConfiguration;
308+
buildSettings = {
309+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
310+
CODE_SIGN_ENTITLEMENTS = imageviewer5/imageviewer5.entitlements;
311+
CODE_SIGN_STYLE = Automatic;
312+
COMBINE_HIDPI_IMAGES = YES;
313+
CURRENT_PROJECT_VERSION = 5;
314+
DEVELOPMENT_ASSET_PATHS = "\"imageviewer5/Preview Content\"";
315+
ENABLE_PREVIEWS = YES;
316+
INFOPLIST_FILE = imageviewer5/Info.plist;
317+
LD_RUNPATH_SEARCH_PATHS = (
318+
"$(inherited)",
319+
"@executable_path/../Frameworks",
320+
);
321+
MACOSX_DEPLOYMENT_TARGET = 10.15;
322+
MARKETING_VERSION = 1.1.3;
323+
PRODUCT_BUNDLE_IDENTIFIER = djs.imageviewer5;
324+
PRODUCT_NAME = "$(TARGET_NAME)";
325+
SWIFT_VERSION = 5.0;
326+
};
327+
name = Debug;
328+
};
329+
6A1A3899249EC2A200389BB0 /* Release */ = {
330+
isa = XCBuildConfiguration;
331+
buildSettings = {
332+
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
333+
CODE_SIGN_ENTITLEMENTS = imageviewer5/imageviewer5.entitlements;
334+
CODE_SIGN_STYLE = Automatic;
335+
COMBINE_HIDPI_IMAGES = YES;
336+
CURRENT_PROJECT_VERSION = 5;
337+
DEVELOPMENT_ASSET_PATHS = "\"imageviewer5/Preview Content\"";
338+
ENABLE_PREVIEWS = YES;
339+
INFOPLIST_FILE = imageviewer5/Info.plist;
340+
LD_RUNPATH_SEARCH_PATHS = (
341+
"$(inherited)",
342+
"@executable_path/../Frameworks",
343+
);
344+
MACOSX_DEPLOYMENT_TARGET = 10.15;
345+
MARKETING_VERSION = 1.1.3;
346+
PRODUCT_BUNDLE_IDENTIFIER = djs.imageviewer5;
347+
PRODUCT_NAME = "$(TARGET_NAME)";
348+
SWIFT_VERSION = 5.0;
349+
};
350+
name = Release;
351+
};
352+
/* End XCBuildConfiguration section */
353+
354+
/* Begin XCConfigurationList section */
355+
6A1A387F249EC2A000389BB0 /* Build configuration list for PBXProject "imageviewer5" */ = {
356+
isa = XCConfigurationList;
357+
buildConfigurations = (
358+
6A1A3895249EC2A200389BB0 /* Debug */,
359+
6A1A3896249EC2A200389BB0 /* Release */,
360+
);
361+
defaultConfigurationIsVisible = 0;
362+
defaultConfigurationName = Release;
363+
};
364+
6A1A3897249EC2A200389BB0 /* Build configuration list for PBXNativeTarget "imageviewer5" */ = {
365+
isa = XCConfigurationList;
366+
buildConfigurations = (
367+
6A1A3898249EC2A200389BB0 /* Debug */,
368+
6A1A3899249EC2A200389BB0 /* Release */,
369+
);
370+
defaultConfigurationIsVisible = 0;
371+
defaultConfigurationName = Release;
372+
};
373+
/* End XCConfigurationList section */
374+
};
375+
rootObject = 6A1A387C249EC2A000389BB0 /* Project object */;
376+
}

0 commit comments

Comments
 (0)