Merge branch 'master' into gh-pages

This commit is contained in:
Serhii Londar
2024-10-06 13:50:44 +02:00
29 changed files with 10967 additions and 5691 deletions

12
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# These are supported funding model platforms
# github: serhii-londar
patreon: serhiilondar
open_collective: open-source-mac-os-apps # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: serhii-londar
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -0,0 +1,303 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
E8FDFD7F226E769900FE80E7 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8FDFD7E226E769900FE80E7 /* main.swift */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
E8FDFD70226E74F400FE80E7 /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = /usr/share/man/man1/;
dstSubfolderSpec = 0;
files = (
);
runOnlyForDeploymentPostprocessing = 1;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
E8FDFD72226E74F400FE80E7 /* ReadmeGenerator */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ReadmeGenerator; sourceTree = BUILT_PRODUCTS_DIR; };
E8FDFD7E226E769900FE80E7 /* main.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
E8FDFD6F226E74F400FE80E7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
E8FDFD69226E74F400FE80E7 = {
isa = PBXGroup;
children = (
E8FDFD74226E74F400FE80E7 /* ReadmeGenerator */,
E8FDFD73226E74F400FE80E7 /* Products */,
);
sourceTree = "<group>";
};
E8FDFD73226E74F400FE80E7 /* Products */ = {
isa = PBXGroup;
children = (
E8FDFD72226E74F400FE80E7 /* ReadmeGenerator */,
);
name = Products;
sourceTree = "<group>";
};
E8FDFD74226E74F400FE80E7 /* ReadmeGenerator */ = {
isa = PBXGroup;
children = (
E8FDFD7E226E769900FE80E7 /* main.swift */,
);
path = ReadmeGenerator;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
E8FDFD71226E74F400FE80E7 /* ReadmeGenerator */ = {
isa = PBXNativeTarget;
buildConfigurationList = E8FDFD79226E74F400FE80E7 /* Build configuration list for PBXNativeTarget "ReadmeGenerator" */;
buildPhases = (
E8FDFD6E226E74F400FE80E7 /* Sources */,
E8FDFD6F226E74F400FE80E7 /* Frameworks */,
E8FDFD70226E74F400FE80E7 /* CopyFiles */,
);
buildRules = (
);
dependencies = (
);
name = ReadmeGenerator;
productName = ReadmeGenerator;
productReference = E8FDFD72226E74F400FE80E7 /* ReadmeGenerator */;
productType = "com.apple.product-type.tool";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
E8FDFD6A226E74F400FE80E7 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1020;
LastUpgradeCheck = 1130;
ORGANIZATIONNAME = "Serhii Londar";
TargetAttributes = {
E8FDFD71226E74F400FE80E7 = {
CreatedOnToolsVersion = 10.2.1;
LastSwiftMigration = 1020;
};
};
};
buildConfigurationList = E8FDFD6D226E74F400FE80E7 /* Build configuration list for PBXProject "ReadmeGenerator" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = E8FDFD69226E74F400FE80E7;
productRefGroup = E8FDFD73226E74F400FE80E7 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
E8FDFD71226E74F400FE80E7 /* ReadmeGenerator */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
E8FDFD6E226E74F400FE80E7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
E8FDFD7F226E769900FE80E7 /* main.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
E8FDFD77226E74F400FE80E7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
E8FDFD78226E74F400FE80E7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "-";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
E8FDFD7A226E74F400FE80E7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
E8FDFD7B226E74F400FE80E7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "-";
CODE_SIGN_STYLE = Automatic;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
"@loader_path/../Frameworks",
);
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
E8FDFD6D226E74F400FE80E7 /* Build configuration list for PBXProject "ReadmeGenerator" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E8FDFD77226E74F400FE80E7 /* Debug */,
E8FDFD78226E74F400FE80E7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
E8FDFD79226E74F400FE80E7 /* Build configuration list for PBXNativeTarget "ReadmeGenerator" */ = {
isa = XCConfigurationList;
buildConfigurations = (
E8FDFD7A226E74F400FE80E7 /* Debug */,
E8FDFD7B226E74F400FE80E7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = E8FDFD6A226E74F400FE80E7 /* Project object */;
}

View File

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

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict/>
</plist>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildLocationStyle</key>
<string>UseAppPreferences</string>
<key>CustomBuildIntermediatesPath</key>
<string>Build/Intermediates.noindex</string>
<key>CustomBuildLocationType</key>
<string>RelativeToWorkspace</string>
<key>CustomBuildProductsPath</key>
<string>Build/Products</string>
<key>CustomIndexStorePath</key>
<string>Index/DataStore</string>
<key>DerivedDataLocationStyle</key>
<string>Default</string>
<key>EnabledFullIndexStoreVisibility</key>
<false/>
<key>IssueFilterStyle</key>
<string>ShowActiveSchemeOnly</string>
<key>LiveSourceIssuesEnabled</key>
<true/>
<key>SharedBuildFolderName</key>
<string>Build</string>
</dict>
</plist>

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1130"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E8FDFD71226E74F400FE80E7"
BuildableName = "ReadmeGenerator"
BlueprintName = "ReadmeGenerator"
ReferencedContainer = "container:ReadmeGenerator.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E8FDFD71226E74F400FE80E7"
BuildableName = "ReadmeGenerator"
BlueprintName = "ReadmeGenerator"
ReferencedContainer = "container:ReadmeGenerator.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
customWorkingDirectory = "/Users/serhii-londar/Documents/GitHub/open-source-mac-os-apps"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E8FDFD71226E74F400FE80E7"
BuildableName = "ReadmeGenerator"
BlueprintName = "ReadmeGenerator"
ReferencedContainer = "container:ReadmeGenerator.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "E8FDFD71226E74F400FE80E7"
BuildableName = "ReadmeGenerator"
BlueprintName = "ReadmeGenerator"
ReferencedContainer = "container:ReadmeGenerator.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
uuid = "CF7C8D58-DB6B-4056-85F7-23463FD8B049"
type = "1"
version = "2.0">
<Breakpoints>
<BreakpointProxy
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
<BreakpointContent
uuid = "45F482F7-51D8-424D-B20F-C8C2F0B864C5"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
filePath = "main.swift"
timestampString = "577666659.971123"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
startingLineNumber = "326"
endingLineNumber = "326"
landmarkName = "srcLinePattern"
landmarkType = "24">
</BreakpointContent>
</BreakpointProxy>
</Breakpoints>
</Bucket>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>ReadmeGenerator.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>E8FDFD71226E74F400FE80E7</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View File

@@ -1,13 +1,16 @@
//
// ReadmeGenerator.swift
// awesome-mac-os-apps-helper
// main.swift
// ReadmeGenerator
//
// Created by Serhii Londar on 11/12/18.
// Created by Serhii Londar on 4/23/19.
// Copyright © 2019 Serhii Londar. All rights reserved.
//
import Foundation
let header = """
[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg)](https://vshymanskyy.github.io/StandWithUkraine)
<p align="center">
<img src="./icons/icon.png">
</p>
@@ -19,11 +22,15 @@ let header = """
<a href="https://gitter.im/open-source-mac-os-apps/Lobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link"><img alt="Join the chat at gitter" src="https://badges.gitter.im/Join%20Chat.svg" /></a>
</p>
List of awesome open source applications for macOS. This list contains a lot of native, and cross-platform apps. The main goal of this repository is to find free open source apps and start contributing. Feel free to [contribute](CONTRIBUTING.md) to the list, any suggestions are welcome!
To receive all new or popular applications you can join our [telegram channel](https://t.me/opensourcemacosapps).
## Support
Hey friend! Help me out for a couple of :beers:! <span class="badge-patreon"><a href="https://www.patreon.com/serhiilondar" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
List of awesome open source applications for macOS. This list contains a lot of native, and cross-platform apps. The main goal of this repository is to find free open source apps and start contributing. Feel free to [contribute](CONTRIBUTING.md) to the list, any suggestions are welcome!
## Languages
You can see in which language an app is written. Currently there are following languages:
@@ -42,8 +49,9 @@ You can see in which language an app is written. Currently there are following l
- ![python_icon] - Python language.
- ![ruby_icon] - Ruby language.
- ![rust_icon] - Rust language.
- ![shell_icon] - Shell language.
- ![swift_icon] - Swift language.
- ![type_script_icon] - TypeScript language.
- ![typescript_icon] - TypeScript language.
## Contents
@@ -54,18 +62,18 @@ You can see in which language an app is written. Currently there are following l
- [Cryptocurrency](#cryptocurrency)
- [Database](#database)
- [Development](#development)
- [Git](#git)
- [iOS / macOS](#ios--macos)
- [JSON Parsing](#json-parsing)
- [Web development](#web-development)
- [Other](#other)
- [Git](#git)
- [iOS / macOS](#ios--macos)
- [JSON Parsing](#json-parsing)
- [Web development](#web-development)
- [Other development](#other-development)
- [Downloader](#downloader)
- [Editors](#editors)
- [CSV](#csv)
- [JSON](#json)
- [Markdown](#markdown)
- [TeX](#tex)
- [Text](#text)
- [CSV](#csv)
- [JSON](#json)
- [Markdown](#markdown)
- [TeX](#tex)
- [Text](#text)
- [Extensions](#extensions)
- [Finder](#finder)
- [Games](#games)
@@ -78,7 +86,7 @@ You can see in which language an app is written. Currently there are following l
- [Music](#music)
- [News](#news)
- [Notes](#notes)
- [Other](#other-1)
- [Other](#other)
- [Podcast](#podcast)
- [Productivity](#productivity)
- [Screensaver](#screensaver)
@@ -88,6 +96,7 @@ You can see in which language an app is written. Currently there are following l
- [Streaming](#streaming)
- [System](#system)
- [Terminal](#terminal)
- [Touch Bar](#touch-bar)
- [Utilities](#utilities)
- [VPN & Proxy](#vpn--proxy)
- [Video](#video)
@@ -123,9 +132,11 @@ Thanks to all the people who contribute:
[python_icon]: ./icons/python-16.png 'Python language.'
[ruby_icon]: ./icons/ruby-16.png 'Ruby language.'
[rust_icon]: ./icons/rust-16.png 'Rust language.'
[shell_icon]: ./icons/shell-16.png 'Shell language.'
[swift_icon]: ./icons/swift-16.png 'Swift language.'
[type_script_icon]: ./icons/typescript-16.png 'TypeScript language.'
[typescript_icon]: ./icons/typescript-16.png 'TypeScript language.'
"""
class JSONApplications: Codable {
let applications: [JSONApplication]
@@ -145,28 +156,34 @@ class JSONApplications: Codable {
class JSONApplication: Codable {
var title: String
var iconURL: String
var repoURL: String
var shortDescription: String
var languages: [String]
var screenshots: [String]
var category: String
var categories: [String]
var officialSite: String
enum CodingKeys: String, CodingKey {
case title
case iconURL = "icon_url"
case repoURL = "repo_url"
case shortDescription = "short_description"
case languages
case screenshots
case category
case categories
case officialSite = "official_site"
}
init(title: String, repoURL: String, shortDescription: String, languages: [String], screenshots: [String], category: String) {
init(title: String, iconURL: String, repoURL: String, shortDescription: String, languages: [String], screenshots: [String], categories: [String], officialSite: String) {
self.title = title
self.iconURL = iconURL
self.repoURL = repoURL
self.shortDescription = shortDescription
self.languages = languages
self.screenshots = screenshots
self.category = category
self.categories = categories
self.officialSite = officialSite
}
}
@@ -200,57 +217,67 @@ class ReadmeGenerator {
func generateReadme() {
print("Start")
guard let applicationsData = try? Data(contentsOf: URL(fileURLWithPath: FilePaths.applications.rawValue)) else { return }
guard let categoriesData = try? Data(contentsOf: URL(fileURLWithPath: FilePaths.categories.rawValue)) else { return }
let jsonDecoder = JSONDecoder()
guard let applicationsObject = try? jsonDecoder.decode(JSONApplications.self, from: applicationsData) else { return }
guard let categoriesObject = try? jsonDecoder.decode(Categories.self, from: categoriesData) else { return }
var categories = categoriesObject.categories
let subcategories = categories.filter({ $0.parent != nil && !$0.parent!.isEmpty })
var applications = applicationsObject.applications
for subcategory in subcategories {
if let index = categories.lastIndex(where: { $0.parent != subcategory.id }) {
categories.remove(at: index)
}
}
categories = categories.sorted(by: { $0.title < $1.title })
applications = applications.sorted(by: { $0.category < $1.category })
readmeString.append(header)
print("Start iteration....")
for category in categories {
readmeString.append(String.enter + String.section + String.space + category.title + String.enter)
var categoryApplications = applications.filter({ $0.category == category.id })
categoryApplications = categoryApplications.sorted(by: { $0.title < $1.title })
do {
// get current file path:
let thisFilePath:String = #file
var url = URL(fileURLWithPath: thisFilePath)
//cd ../ to the root folder: (delete `.github/main.swift`
url = url.deletingLastPathComponent().deletingLastPathComponent()
let applicationsUrl = url.appendingPathComponent(FilePaths.applications.rawValue)
let applicationsData = try Data(contentsOf: applicationsUrl)
let categoriesData = try Data(contentsOf: url.appendingPathComponent(FilePaths.categories.rawValue))
let jsonDecoder = JSONDecoder()
let applicationsObject = try jsonDecoder.decode(JSONApplications.self, from: applicationsData)
let categoriesObject = try jsonDecoder.decode(Categories.self, from: categoriesData)
for application in categoryApplications {
readmeString.append(application.markdownDescription())
readmeString.append(String.enter)
}
var categories = categoriesObject.categories
let subcategories = categories.filter({ $0.parent != nil && !$0.parent!.isEmpty })
let applications = applicationsObject.applications
var subcategories = subcategories.filter({ $0.parent == category.id })
guard subcategories.count > 0 else { continue }
subcategories = subcategories.sorted(by: { $0.title < $1.title })
for subcategory in subcategories {
readmeString.append(String.enter + String.subsection + String.space + subcategory.title + String.enter)
var categoryApplications = applications.filter({ $0.category == subcategory.id })
if let index = categories.lastIndex(where: { $0.parent != subcategory.id }) {
categories.remove(at: index)
}
}
categories = categories.sorted(by: { $0.title < $1.title })
readmeString.append(header)
print("Start iteration....")
for category in categories {
readmeString.append(String.enter + String.section + String.space + category.title + String.enter)
var categoryApplications = applications.filter({ $0.categories.contains(category.id) })
categoryApplications = categoryApplications.sorted(by: { $0.title < $1.title })
for application in categoryApplications {
readmeString.append(application.markdownDescription())
readmeString.append(String.enter)
}
var subcategories = subcategories.filter({ $0.parent == category.id })
guard subcategories.count > 0 else { continue }
subcategories = subcategories.sorted(by: { $0.title < $1.title })
for subcategory in subcategories {
readmeString.append(String.enter + String.subsection + String.space + subcategory.title + String.enter)
var categoryApplications = applications.filter({ $0.categories.contains(subcategory.id) })
categoryApplications = categoryApplications.sorted(by: { $0.title < $1.title })
for application in categoryApplications {
readmeString.append(application.markdownDescription())
readmeString.append(String.enter)
}
}
}
print("Finish iteration...")
readmeString.append(footer)
try readmeString.data(using: .utf8)?.write(to: url.appendingPathComponent(FilePaths.readme.rawValue))
print("Finish")
} catch {
print(error)
}
print("Finish iteration...")
readmeString.append(footer)
try? readmeString.data(using: .utf8)?.write(to: URL(fileURLWithPath: FilePaths.readme.rawValue))
print("Finish")
}
}
@@ -260,6 +287,7 @@ extension String {
static let enter = "\n"
static let section = "###"
static let subsection = "####"
static let iconPrefix = "_icon"
}
extension JSONApplication {
@@ -267,20 +295,21 @@ extension JSONApplication {
var markdownDescription = String.empty
var languages: String = String.empty
for lang in self.languages {
languages.append("![\(lang)] ")
languages.append("![\(lang)\(String.iconPrefix)] ")
}
markdownDescription.append("- [\(self.title)](\(self.repoURL)) - \(self.shortDescription) \(languages)")
if self.screenshots.count > 0 {
var screenshotsString = String.empty
screenshotsString += (String.space + Constants.detailsBeginString + String.space)
self.screenshots.forEach({
screenshotsString += (String.space + (NSString(format: Constants.srcLinePattern as NSString, $0 as CVarArg) as String) + String.space)
})
screenshotsString += (String.space + Constants.detailsEndString + String.space)
markdownDescription.append(screenshotsString)
}
/*
if self.screenshots.count > 0 {
var screenshotsString = String.empty
screenshotsString += (String.space + Constants.detailsBeginString + String.space)
self.screenshots.forEach({
screenshotsString += (String.space + (NSString(format: Constants.srcLinePattern as NSString, $0 as CVarArg) as String) + String.space)
})
screenshotsString += (String.space + Constants.detailsEndString + String.space)
markdownDescription.append(screenshotsString)
}
*/
return markdownDescription
}
}
@@ -307,5 +336,5 @@ struct Constants {
}
}
ReadmeGenerator().generateReadme()

7
.github/weekly-digest.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
# Configuration for weekly-digest - https://github.com/apps/weekly-digest
publishDay: mon
canPublishIssues: true
canPublishPullRequests: true
canPublishContributors: true
canPublishStargazers: true
canPublishCommits: true

17
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,17 @@
name: Generate Readme
on:
push:
branches:
- master
jobs:
generate-readme:
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- run: swift ./.github/main.swift
- run: chmod +x ./.github/deploy.sh
- run: git config user.name "serhii-londar"
- run: git config user.email "serhii.londar@gmail.com"
- run: git add README.md
- run: git commit -m "Generate README"
- run: git push --quiet "https://${API_TOKEN}@github.com/serhii-londar/open-source-mac-os-apps.git" master:master > /dev/null 2>&1

14
.github/workflows/pr.yml vendored Normal file
View File

@@ -0,0 +1,14 @@
name: Check PR
on:
pull_request:
branches:
- master
jobs:
setup:
runs-on: macos-latest
steps:
- run: gem install awesome_bot
- run: gem install bundler
- run: gem install danger
- uses: actions/checkout@v3
- run: awesome_bot applications.json -w https://matrix.org,https://camo.githubusercontent.com,http://joshparnham.com,https://pock.pigigaldi.com,https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-6,https://adequate.systems/ --allow 429

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
.github/ReadmeGenerator.xcodeproj/project.xcworkspace/xcuserdata/serhii-londar.xcuserdatad/UserInterfaceState.xcuserstate
.github/ReadmeGenerator.xcodeproj/xcuserdata/serhii-londar.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

View File

@@ -1,17 +0,0 @@
sudo: required
language: swift
osx_image: xcode10
rvm:
- 2.2
before_script:
- gem install awesome_bot
- gem install danger
script:
- awesome_bot applications.json -w https://matrix.org/blog/home/
- danger
after_success:
- swift ./.github/ReadmeGenerator.swift
- chmod +x ./.github/deploy.sh
- ./.github/deploy.sh
notifications:
email: false

View File

@@ -4,12 +4,32 @@ Please ensure your pull request adheres to the following guidelines:
- Search previous suggestions before making a new one, as yours may be a duplicate.
- Make an individual pull request for each suggestion.
- Use the following format: `[PACKAGE](LINK) - DESCRIPTION. ![LANGUAGE_ICON] <details> <summary> Screenshots </summary> <p float="left"> <bt><img src='Screensho1' width="400"/> <bt><img src='Screensho2' width="400"/> </p></details> `.
- New categories, or improvements to the existing categorization are welcome.
- Edit [applications.json](https://github.com/serhii-londar/open-source-mac-os-apps/blob/master/applications.json) instead of [README.md](https://github.com/serhii-londar/open-source-mac-os-apps/blob/master/README.md).
- Use the following format:
```json
{
"short_description": "Description of repository",
"categories": [
"Application category 1",
"Application category 2"
],
"repo_url": "Link to repository",
"title": "Name of application",
"icon_url": "URL to application icon",
"screenshots": [
"Screenshot url 1",
"Screenshot url 2"
],
"official_site": "Official site link",
"languages": [
"Language name"
]
}
```
- New categories, or improvements to the existing categorization are welcome. List of all categories can be found in [categories.json](https://github.com/serhii-londar/open-source-mac-os-apps/blob/master/categories.json).
- Keep descriptions short and simple, but descriptive.
- End all descriptions with a full stop/period.
- Check your spelling and grammar.
- Make sure that your suggestion is positioned as alphabetically in category.
- Make sure your text editor is set to remove trailing whitespace.
#### Deleting
@@ -24,7 +44,6 @@ Typical reasons for deleting a project:
#### Projects are ineligible if:
- Lack recent commit
- Not written in English
- README is not clear
- README is not clear or not written in English
Your contributions are always welcome! To generate full description for your repository you can use [awesome-mac-os-apps-helper](https://github.com/serhii-londar/awesome-mac-os-apps-helper). Thank you for your suggestions! :smiley:
Your contributions are always welcome! Thank you for your suggestions! :smiley:

View File

@@ -4,9 +4,6 @@ fail 'Please provide a summary in the Pull Request description' if github.pr_bod
# Warn when there are merge commits in the diff
warn 'Please rebase to get rid of the merge commits in this Pull Request' if git.commits.any? { |c| c.message =~ /^Merge branch 'master'/ }
# Only one library per pull request
warn 'Too many changes (when adding, please keep it to one project per Pull Request)' if git.insertions > 1
# Warn if pull request is not updated
warn 'Please update the Pull Request title to contain the library name' if github.pr_title.include? 'Update README.md'

View File

@@ -15,9 +15,8 @@
## Checklist
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
- [ ] Edit [applications.json](https://github.com/serhii-londar/open-source-mac-os-apps/blob/master/applications.json) instead of [README.md](https://github.com/serhii-londar/open-source-mac-os-apps/blob/master/README.md).
- [ ] Only one project/change is in this pull request
- [ ] Addition in alphabetical order
- [ ] Appropriate language icon(s) added if applicable
- [ ] Screenshots(s) added if any
- [ ] Has a commit from less than 2 years ago
- [ ] Has a **clear** README in English

846
README.md

File diff suppressed because it is too large Load Diff

1
ReadmeGenerator Submodule

Submodule ReadmeGenerator added at 7378e190a5

View File

@@ -1,3 +0,0 @@
import Foundation
print("Hello opensource applications!")

File diff suppressed because it is too large Load Diff

View File

@@ -1,5 +1,5 @@
{
"categories":
"categories":
[
{
"title": "Audio",
@@ -69,6 +69,10 @@
"title": "Mail",
"id": "mail",
"description": ""
}, {
"title": "Medical",
"id": "medical",
"description": ""
}, {
"title": "Menubar",
"id": "menubar",
@@ -89,6 +93,10 @@
"title": "Other",
"id": "other",
"description": ""
}, {
"title": "Player",
"id": "player",
"description": ""
}, {
"title": "Podcast",
"id": "podcast",
@@ -125,13 +133,17 @@
"title": "Terminal",
"id": "terminal",
"description": ""
}, {
"title": "Touch Bar",
"id": "touch-bar",
"description": ""
}, {
"title": "Utilities",
"id": "utilities",
"description": ""
}, {
"title": "VPN & Proxy",
"id": "vpn-proxy",
"id": "vpn--proxy",
"description": ""
}, {
"title": "Video",
@@ -197,4 +209,4 @@
"description": ""
}
]
}
}

BIN
icons/Vim script_icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
icons/applescript-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 761 B

BIN
icons/applescript.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
icons/shell-16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 473 B

BIN
icons/shell.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB