📝 Read, update and write your Xcode projects

Overview

XcodeProj

All Contributors

Swift Package Manager Release Code Coverage Slack License

XcodeProj is a library written in Swift for parsing and working with Xcode projects. It's heavily inspired by CocoaPods XcodeProj and xcode.


Projects Using XcodeProj

Project Repository
Tuist github.com/tuist/tuist
Sourcery github.com/krzysztofzablocki/Sourcery
ProjLint github.com/JamitLabs/ProjLint
XcodeGen github.com/yonaskolb/XcodeGen
xspm gitlab.com/Pyroh/xspm

If you are also leveraging XcodeProj in your project, feel free to open a PR to include it in the list above.

Installation

Swift Package Manager

Add the dependency in your Package.swift file:

let package = Package(
    name: "myproject",
    dependencies: [
        .package(url: "https://github.com/tuist/xcodeproj.git", .upToNextMajor(from: "7.23.0"))
        ],
    targets: [
        .target(
            name: "myproject",
            dependencies: ["XcodeProj"]),
        ]
)

Carthage

Only macOS

# Cartfile
github "tuist/xcodeproj" ~> 7.23.0

CocoaPods

pod 'xcodeproj', '~> 7.23.0

Scripting

Using swift-sh you can automate project-tasks using scripts, for example we can make a script that keeps a project’s version key in sync with the current git tag that represents the project’s version:

#!/usr/bin/swift sh
import Foundation
import XcodeProj  // @tuist ~> 7.23.0
import PathKit

guard CommandLine.arguments.count == 3 else {
    let arg0 = Path(CommandLine.arguments[0]).lastComponent
    fputs("usage: \(arg0) <project> <new-version>\n", stderr)
    exit(1)
}

let projectPath = Path(CommandLine.arguments[1])
let newVersion = CommandLine.arguments[2]
let xcodeproj = try XcodeProj(path: projectPath)
let key = "CURRENT_PROJECT_VERSION"

for conf in xcodeproj.pbxproj.buildConfigurations where conf.buildSettings[key] != nil {
    conf.buildSettings[key] = newVersion
}

try xcodeproj.write(path: projectPath)

You could then store this in your repository, for example at scripts/set-project-version and then run it:

$ scripts/set-project-version ./App.xcodeproj 1.2.3
$ git add App.xcodeproj
$ git commit -m "Bump version"
$ git tag 1.2.3

Future adaption could easily include determining the version and bumping it automatically. If so, we recommend using a library that provides a Version object.

Documentation 📝

Want to start using XcodeProj? Start by digging into our documentation which will help you get familiar with the API and get to know more about the Xcode projects structure.

References 📚

Contributing

  1. Git clone the repository [email protected]:tuist/xcodeproj.git.
  2. Generate xcodeproj with swift package generate-xcodeproj.
  3. Open XcodeProj.xcodeproj.

License

XcodeProj is released under the MIT license. See LICENSE for details.

Contributors

Thanks goes to these wonderful people (emoji key):


Joseph Colicchio

🤔

deatondg

🤔

Dan Fleming

💻

Sascha Schwabbauer

🤔

Marcin Iwanicki

🚧

Adam Khazi

🚧

Elliott Williams

💻

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Compile error in release builds

    Compile error in release builds

    It seems Swift 4.2 is failing to build xcodeproj in release mode for some reason. This can be seen by running:

    swift build -c release
    

    The following error occurs

    PHI node operands are not the same type as the result!
      %159 = phi %Ts23_ContiguousArrayStorageCySSG* [ %336, %328 ], [ %143, %481 ], [ %143, %470 ], [ %143, %454 ], [ %143, %438 ], [ %143, %423 ], [ %143, %146 ]
    <unknown>:0: error: fatal error encountered during compilation; please file a bug report with your project and the crash log
    <unknown>:0: note: Broken function found, compilation aborted!
    0  swift                    0x000000010e76664a PrintStackTraceSignalHandler(void*) + 42
    1  swift                    0x000000010e765dfe SignalHandler(int) + 302
    2  libsystem_platform.dylib 0x00007fff7908df5a _sigtramp + 26
    3  libsystem_platform.dylib 0x000000011b583600 _sigtramp + 2723108544
    4  libsystem_c.dylib        0x00007fff78e2b1ae abort + 127
    5  swift                    0x000000010a9edaf7 swift::performFrontend(llvm::ArrayRef<char const*>, char const*, void*, swift::FrontendObserver*)::$_1::__invoke(void*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, bool) + 519
    6  swift                    0x000000010e71a278 llvm::report_fatal_error(llvm::Twine const&, bool) + 280
    7  swift                    0x000000010e71a15b llvm::report_fatal_error(char const*, bool) + 43
    8  swift                    0x000000010e6e17e6 (anonymous namespace)::VerifierLegacyPass::runOnFunction(llvm::Function&) + 54
    9  swift                    0x000000010e68804e llvm::FPPassManager::runOnFunction(llvm::Function&) + 446
    10 swift                    0x000000010e690363 llvm::legacy::FunctionPassManagerImpl::run(llvm::Function&) + 115
    11 swift                    0x000000010e690258 llvm::legacy::FunctionPassManager::run(llvm::Function&) + 392
    12 swift                    0x000000010abb4228 swift::performLLVM(swift::IRGenOptions&, swift::DiagnosticEngine*, llvm::sys::SmartMutex<false>*, llvm::GlobalVariable*, llvm::Module*, llvm::TargetMachine*, swift::version::Version const&, llvm::StringRef, swift::UnifiedStatsReporter*) + 4504
    13 swift                    0x000000010abb8e0e ThreadEntryPoint(swift::irgen::IRGenerator*, llvm::sys::SmartMutex<false>*, int) + 206
    14 swift                    0x000000010abb8e6f void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(swift::irgen::IRGenerator*, llvm::sys::SmartMutex<false>*, int), swift::irgen::IRGenerator*, llvm::sys::SmartMutex<false>*, int> >(void*) + 47
    15 libsystem_pthread.dylib  0x00007fff79097661 _pthread_body + 340
    16 libsystem_pthread.dylib  0x00007fff7909750d _pthread_body + 0
    17 libsystem_pthread.dylib  0x00007fff79096bf9 thread_start + 13
    Stack dump:
    0.	Running pass 'Module Verifier' on function '@"$S9xcodeproj12PBXBuildFileC16plistKeyAndValue4proj9referenceAA15CommentedStringV3key_AA05PlistG0O5valuetAA7PBXProjC_SStKFTf4dxn_n"'
    <unknown>:0: error: unable to execute command: Abort trap: 6
    <unknown>:0: error: compile command failed due to signal 6 (use -v to see invocation)
    

    This is a blocker for XcodeGen and there is an open issue here https://github.com/yonaskolb/XcodeGen/issues/391

    status:ready-development type:bug 
    opened by yonaskolb 17
  • Support RemoteRunnable in Schemes

    Support RemoteRunnable in Schemes

    Context 🕵️‍♀️

    Schemes can't specify a <RemoteRunnable> in the <LaunchAction>, and thus can't launch Sticker Packs:

    <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = ""
      selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES"
      launchAutomaticallySubstyle = "2">
      <RemoteRunnable
         runnableDebuggingMode = "1"
         BundleIdentifier = "com.apple.MobileSMS">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "5BA74B171DEE4BDF00569536"
            BuildableName = "Sticker Pack.appex"
            BlueprintName = "Sticker Pack"
            ReferencedContainer = "container:Project.xcodeproj">
         </BuildableReference>
      </RemoteRunnable>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "5BA74B171DEE4BDF00569536"
            BuildableName = "Sticker Pack.appex"
            BlueprintName = "Sticker Pack"
            ReferencedContainer = "container:Project.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
    </LaunchAction>
    

    What 🌱

    Currently BuildableProductRunnable is the only option for a XCScheme.LaunchAction. It should support RemoteRunnable as well.

    Proposal 🎉

    Adjust BuildableProductRunnable to specify an optional BundleIdentifier, and if specified it's tag will be <RemoteRunnable> instead, or make a common base class and implement both BuildableProductRunnable and RemoteRunnable as passable to buildableProductRunnable.

    status:ready-development type:feature 
    opened by brentleyjones 17
  • Swift 4 migration

    Swift 4 migration

    Issue: Link

    Short description

    Migrate the project to Swift 4

    Solution

    Build the project with Xcode 9, fix all warnings and errors and update SPM manifest syntax.

    Implementation

    • [x] Update Package.swift file. Please, check versions of dependencies. In my opinion, it's good practice to update dependencies to next major version.
    • [x] Fix new syntax errors in sorted(by:) and NSTextCheckingResult.range(at:) functions.

    GIF

    Smile

    opened by artemnovichkov 17
  • Creating a PBXGroup

    Creating a PBXGroup

    Is it possible to create a new PBXGroup and append it to the Xcode project?

    I've tried this:

    let project = try! XcodeProj(path: "MyProject.xcodeproj")
    let pbxproj = project.pbxproj
    let group = PBXGroup(reference: "CustomPBXGroup", children: [], sourceTree: sourceTree)
    pbxproj.objects.groups.append(group)
    

    but groups is read only property.

    Is there a way to do this?

    status:waiting-input type:feature 
    opened by Daltron 17
  • Optimize bottlenecks

    Optimize bottlenecks

    Short description 📝

    Optimizes a few of the big bottlenecks. I can split it up into smaller PRs if wanted.

    Solution 📦

    Replace high-level Swift ways of doing things, which in these cases cause significant overhead, with fast and low-level ways of doing things

    opened by michaeleisel 16
  • Referencing targets in other projects

    Referencing targets in other projects

    I am trying to add dependencies to targets in separate projects.

    This doesn't appear to be possible. Specifically the containerPortal for the PBXContainerItemProxy needs to point to the PBXFileReference for the separate project. But PBXContainerItemProxy can only have its containerPortal set to a local PBXProject object.

    My question is, is this possible and I’m just doing it wrong?

    If it's not possible, I could probably submit a PR to add this functionality. Though I'd need guidance.

    Thanks.

    status:waiting-input 
    opened by mxcl 16
  • Linux compile

    Linux compile

    Resolves https://github.com/tuist/xcodeproj/issues/296. Opening as a draft for some early feedback.

    Short description 📝

    Draft PR of what changes are required to get the project compiling on Linux.

    Solution 📦

    There were a few things that needed changing:

    • Move back to Codable to generate a generic dictionary from the project XML, which required some type-erasure around the Any type so that it could be decoded.
    • Removal of all ObjC references, some unused (like dictionary extensions) and NSObject usage.
    • Removal of all Sourcery generated isEqual methods
    • A copy of PropertyListEncoder into the project for Linux usage
    • Macros to remove usage of MacOS-specific log functions
    • Add test runners for Linux main

    I can't quite get this to pass all tests because I get the following in the Docker image I've been running:

    Cloning into '/tmp/WWDC'...
    fatal: unable to access 'https://github.com/insidegui/WWDC/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
    

    Leftover

    Leftover additional steps at a minimum. This definitely needs some work.

    • [ ] Instead of commenting out CVarArg code, replace with a method functional on all platforms
    • [ ] Verify integration tests
    • [ ] Add Linux tests to CircleCI
    opened by thedavidharris 15
  • Can't build for testing

    Can't build for testing

    Context 🕵️‍♀️

    Try to run tests in master with Xcode.

    What 🌱

    Everything works fine in Terminal, but I have an errors in Xcode: Module 'xcproj' was not compiled for testing

    Proposal 🎉

    Fix it!

    type:thread 
    opened by artemnovichkov 15
  • Add enable previews build settings

    Add enable previews build settings

    Short description 📝

    When creating a new project with SwiftUI checkbox, Xcode sets ENABLE_PREVIEWS=YES. It does not do so when setting storyboard as a default, but I have not found any drawbacks when it is set to yes, even if SwiftUI previews are not being used.

    Solution 📦

    Add ENABLE_PREVIEWS=YES to build settings .all

    Linked to https://github.com/tuist/tuist/pull/785

    opened by fortmarek 14
  • Default scripts

    Default scripts

    I released Carting for adding and updating Carthage script. There are a few scripts using in almost every project, for example, Fabric, Carthage and SwiftLint. What do you think about adding of default scripts for your framework? And maybe I can help you with it.

    status:waiting-input type:thread 
    opened by artemnovichkov 14
  • Fully qualified Names of source files

    Fully qualified Names of source files

    Hey,

    sorry if this is the wrong place to ask, but I can't find anything anywhere else.

    Is there an option to get the fully qualified name of the sourcefiles? In project.pbxproj.objects I can only find the direct filename.

    Thanks

    status:ready-development type:feature 
    opened by olbrichj 13
  • Add support for xcuserdata

    Add support for xcuserdata

    👋 Hi I'm new here. Thanks for this project, it's great!

    Short description 📝

    XcodeProj doesn't support xcuserdata yet, this PR adds XCUserData

    Background

    XCSchemeManagement is already implemented, but it's not included in Sources/XcodeProj/Project/XcodeProj.swift. XcodeProj also currently does not feature the necessary XCUserData where XCSchemeManagement should be part of.

    In XcodeGen we are trying to add support for scheme management via XCSchemeManagement that should result in three options for schemes: visibility, order hints and wether or not a scheme is shared.

    When a scheme is not shared it should be written to xcuserdata instead of xcshareddata but since xcuserdata is not part of XcodeProj yet this is not possible at the moment and the shared: Bool property of XCSchemeManagement is not very useful.

    209574381-98840d4a-ea19-4602-a838-9de86fbaac8d

    Implementation 👩‍💻👨‍💻

    • [x] Created XCUserData & XCUserDataTests
    • [x] Changed XcodeProj.swift so schemes and breakpoints could be written to both shared and user data
    • [x] Conformed XCSharedData to Writable because XcodeProj.swift was getting a bit bloated.
    • [x] Conformed XCSchemeManagement to Writable
    • [x] Added XcodeProjTests to verify changes did not break anything
    • [x] Extracted func testReadWriteProducesNoDiff(file:line:path:initModel:) to testWrite.swift to dry up the tests a bit.

    I'll add some review remarks and questions to the diff.

    Questions

    • Coverage for the files inSources/XcodeProj/Project is a bit low. I found no tests for the code in XcodeProj.swift that is responsible for writing files to disk. XCSharedData is also lacking tests. I thought it would be too much out of scope for this PR, but maybe I can add those in another PR?
    image
    • The url on top of your CHANGELOG.md is pointing to https://tuist.io/docs/usage/get-started/ (404)

    Remarks?

    I had good fun working on this today! I hope you see the added value.

    opened by teameh 1
  • XcodeProj Writable conformance does not include WorkspaceSettings

    XcodeProj Writable conformance does not include WorkspaceSettings

    Context 🕵️‍♀️

    I need to prevent Xcode from automatically creating schemes by setting IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded to false in WorkspaceSettings.xcsettings.

    What 🌱

    WorkspaceSettings already supports this via autoCreateSchemes, so I initialized XcodeProj with custom WorkspaceSettings in order to disable this feature; however, the WorkspaceSettings.xcsettings file that WorkspaceSettings represents is never created when the project is written:

    let sharedData = XCSharedData(workspaceSettings: WorkspaceSettings(autoCreateSchemes: false))
    let project = XcodeProj(workspace: xcworkspace, pbxproj: pbxproj, sharedData: sharedData)
    
    try project.write(path: path) // WorkspaceSettings's write method is never invoked, so WorkspaceSettings.xcsettings is not written
    

    Proposal 🎉

    XcodeProj's Writable conformance includes methods for writing other aspects of XCSharedData, including schemes (XcodeProj.swift:159) and breakpoints (XcodeProj.swift:196).

    My proposal is to create a new method called writeWorkspaceSettings with the following signature:

    public func writeWorkspaceSettings(path: Path, override: Bool = true) throws {
        // Unwrap `sharedData`
        // Invoke `sharedData.workspaceSettings.write(path: workspaceSettingsPath, override: override)`
    }
    

    This method will be called within XcodeProj's write method (XcodeProj.swift:85), resulting in WorkspaceSettings.xcsettings being written:

    public func write(path: Path, override: Bool = true, outputSettings: PBXOutputSettings) throws {
        try path.mkpath()
        try writeWorkspace(path: path, override: override)
        try writePBXProj(path: path, override: override, outputSettings: outputSettings)
        try writeSchemes(path: path, override: override)
        try writeBreakPoints(path: path, override: override)
        try writeWorkspaceSettings(path: path, override: override) // Invoke new method here
    }
    

    P.S. XCSharedData does not conform to Writable, meaning that XcodeProj.swift contains the implementation for writing schemes and breakpoints to file, accounting for 77 of the files 207 lines. The addition of a new method for writing WorkspaceSettings will only add further bloat.

    Would it make sense to add Writable conformance to XCSharedData so that methods like writeSchemes, writeBreakpoints, and the proposed writeWorkspaceSettings can be moved within XCSharedData? This would greatly simplify the XcodeProj.swift file and would result in a write method that looks like the following:

    public func write(path: Path, override: Bool = true, outputSettings: PBXOutputSettings) throws {
        try path.mkpath()
        try writeWorkspace(path: path, override: override)
        try writePBXProj(path: path, override: override, outputSettings: outputSettings)
        try writeSharedData(path: path, override: override) // Unwrap `sharedData` and invoke `sharedData.write` method
    }
    
    opened by dayton-bobbitt 6
  • Build Tool Plugin Support

    Build Tool Plugin Support

    Short description 📝

    I'm an avid user of XcodeGen and would like to have Build Tool Plugin support. It's possible to implement this without having to change this project but it leads to temporary identifiers sticking around in the generated project.

    More details can be found in the issue where I documented my research.

    Solution 📦

    Adds a flag to XCSwiftPackageProductDependency to indicate that it should be treated as a build tool plugin.

    Implementation 👩‍💻👨‍💻

    • Add flag to XCSwiftPackageProductDependency
    • Prefix the product name with "plugin:" as this indicates to Xcode that this should be treated as a plugin
    • Check if a targets dependencies includes a package product that sets the flag to true
    • Fix the package product reference before continuing
    opened by technocidal 4
  • Virtual group hierarchy path

    Virtual group hierarchy path

    Context 🕵️‍♀️

    Our project has been in development for over 10 years and has has very poor maintenance. We wish to use XcodeProj to do a cleanup of the file system so that 900+ files are no in the root level.

    What 🌱

    PBXFileElement.fullPath returns the path to file in the filesystem, however we wish to fetch the 'virtual' path in the project hierarchy.

    Proposal 🎉

    Possibly can just be achieved by using an extension which generates the path based on parent group:

    extension PBXFileElement {
        func virtualPath() -> String? {
            if let file = (parent as? PBXGroup)?.name {
                return (parent?.virtualPath() ?? "x") + "/" + (name ?? path ?? "x")
            } else if let fileName = self.name {
                return (parent?.virtualPath() ?? "x") + "/" + (fileName ?? "x")
            } else {
                return path
            }
        }
    }
    
    opened by markst 2
  • Switching SPM products

    Switching SPM products

    I have a Swift package with two library products:

    let package = Package(
        name: "IRIS",
        platforms: [.macOS(.v10_10)],
        products: [
            .library(
                name: "MySDK-release",
                targets: ["sdk-release"]
            ),
            .library(
                name: "MySDK-debug",
                targets: ["sdk-debug"]
            )
        ],
        targets: [
            .binaryTarget(
                name: "sdk-release",
                url: "https://api.github.com/bar.zip",
                checksum: "..."
            ),
            .binaryTarget(
                name: "sdk-debug",
                url: "https://api.github.com/foo.zip",
                checksum: "..."
            )
        ]
    )
    

    I need to link against MySDK-debug in the debug version of my app, and against MySDK-release in the release version of my app. SPM doesn't support this, so I'm trying to find a way to do it with XcodeProj (on CI I'd run a script which uses XcodeProj to switch the product). I unfortunately can't add both products to the xcode project as they have the same symbol names, and that produces "Multiple commands produce foo.h" errors. Is there a way to do this?

    opened by arielelkin 0
Releases(8.8.0)
Owner
Tuist
A tool to bootstrap, maintain, and interact with Xcode projects at any scale.
Tuist
Example how to make, update and end Live Activity. With Dynamic Island and Lock Screen.

Live Activity Example Example how to make, update and end Live Activity. With Dynamic Island and Lock Screen. Full tutorial available at sparrowcode.i

Sparrow Code 9 Dec 8, 2022
Xcode projects on steroids

Struct Introduction struct is a tool for iOS and Mac developers to automate the creation and management of Xcode projects. Ever lamented over your uno

Rhys 718 Nov 18, 2022
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Introduction Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import the latest

Respresso 10 Nov 8, 2022
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Respresso Android client Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import

Respresso 11 May 27, 2021
Save development time! Respresso automatically transforms and delivers your digital assets into your projects

Respresso iOS client Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import the

Respresso 50 May 1, 2021
Fridax enables you to read variables and intercept/hook functions in Xamarin/Mono JIT and AOT compiled iOS/Android applications.

Fridax is a Node package for dealing with Xamarin applications while using the Frida API. Goal • Installation • Usage • Examples • Issues • License Bu

Northwave 125 Jan 3, 2023
LinkedLog is a Xcode plugin that includes a Xcode PCH header file template that adds the macros `LLog` and `LLogF` and parses their output to link from the console to the corresponding file and line.

LinkedLog Xcode Plugin LinkedLog is a Xcode plugin that includes a Xcode PCH file template that adds the macros LLog and LLogF. The LLog macro will wo

Julian F. Weinert 22 Nov 14, 2022
Kind of tired to need an Android Device on me, just to read manga, so here we are.

Dokusho Kind of tired to need an Android Device on me, just to read manga, so here we are. I am going to prioritize feature based on how I feel and no

Stephan Deumier 13 Oct 10, 2022
A tool to read the binarycookie format of Cookies on iOS applications

BinaryCookieReader Cloned from http://securitylearn.net/wp-content/uploads/tools/iOS/BinaryCookieReader.py ##Usage Python BinaryCookieReader.py [Cooki

Murphy 77 Nov 15, 2022
ConfettiKit is a custom framework used to add Confetti on your iOS/iPadOS projects.

ConfettiKit is a custom framework used to add Confetti on your iOS/iPadOS projects. The kit provides variety of customisations inorder to design a confetti which matches your project's UI. ConfettiKit makes your work of adding Confetti on your project with just one line of code.

Gokul Nair 14 Sep 27, 2022
A command line tool for managing Swift Playground projects on your Mac.

swift-playground-tools A command line tool for managing Swift Playground projects on your Mac. Generate Xcode Project $ playground-tools generate-xcod

Liam Nichols 0 Dec 31, 2021
Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects

Introduction Respresso is a centralized resource manager for shared Android, iOS and Web frontend projects. It allows you to simply import the latest

Respresso 10 Nov 8, 2022
Xcode Plugin helps you find missing methods in your class header, protocols, and super class, also makes fast inserting.

FastStub-Xcode Life is short, why waste it on meaningless typing? What is it? A code generating feature borrowed from Android Studio. FastStub automat

mrpeak 509 Jun 29, 2022
Easily generate cross platform Swift framework projects from the command line

SwiftPlate Easily generate cross platform Swift framework projects from the command line. SwiftPlate will generate Xcode projects for you in seconds,

John Sundell 1.8k Dec 27, 2022
Challenging each other to complete pet projects!

Podlodka Pet Project Challenge Мотивируем друг друга на завершение своих пет проджектов! Каждую неделю каждый участник вносит в банк 1 ставку и ведет

Vladimir Korolev 2 Aug 27, 2022
Use this template as a starting point for any Swift 5 module that you want other people to include in their projects

Swift 5 Module Template Use this template as a starting point for any Swift 5 mo

James Knipe 0 Dec 28, 2021
OpenAPI specification generator for Vapor based Swift projects.

VaporToOpenAPI VaporToOpenAPI is a Swift library which can generate output compatible with OpenAPI version 3.0.1 from Vapor code. You can use generate

null 3 Dec 15, 2022
Ios jetpack - A codabase for iOS projects foundations

iOSJetpack A codabase for iOS projects foundations Neworking Data Reusable Proto

MonsterTechStudio 1 Jan 24, 2022
SwiftUITemplate - Template repository for SwiftUI projects

SwiftUITemplate Template repository for SwiftUI projects. Environment Name Versi

y-okudera 2 Jul 10, 2022