Organizing Your Codebase with Swift Package Manager

Saeid Rezaeisadrabadi
3 min readMar 25, 2024

--

In this story, I want to talk about Swift Package Manager and how to organize a large code base with it.

As your Swift project grows, so does the complexity of its codebase. Maintaining a clean and organized structure becomes crucial for efficient development and collaboration. Here’s where the Swift Package Manager (SPM) shines!

Generated with AI

SPM allows you to break down your codebase into smaller, reusable modules called packages. These packages can then be integrated into your main project, promoting modularity and maintainability.

Why Local Packages?

  • Modular Design: Divide your codebase into logical units (networking, models, utilities) for better organization and easier understanding.
  • Reusability: Share common functionalities across projects by creating reusable packages.
  • Maintainability: Easier to isolate and modify specific functionalities within a package.
  • Collaboration: Enables team members to work on independent packages without affecting the core project.

Getting Started with Local Packages

Look for functionalities that can be encapsulated as independent modules. Examples include networking logic, database logic, or common utility functions.

In Xcode, navigate to File -> New -> Package.

Choose a template, I choose the empty template most of the time. then Choose a name, location, and target project for the new package.

Move the identified codebase into the newly created package.

Update the package file (Package.swift) to reflect the included sources and dependencies.

let package = Package(
name: "MyPackage",
platforms: [.iOS(.v16)],
products: [
.library(
name: "MyPackage",
targets: [
"Database",
"Network"
]
),
],
dependencies: [

],
targets: [
.target(name: "Database"),
.target(name: "Network")
]
)

In your main project’s target settings, navigate to “General” > “Framework, Libraries, and Embedded Content.” Click the “+” button and select your newly created package.

Pro Tips for Effective Package Management

  • Clear Naming Conventions: Use descriptive names for packages and their contents to enhance readability.
  • Dependency Management: Keep track of dependencies between packages to avoid circular references and maintain a clean dependency graph.
  • Public vs. Internal Visibility: Use public for functionalities meant for external consumption and internal for internal package use.
  • Version Control: Integrate your local packages with your version control system (e.g., Git) for proper versioning and collaboration.

By adopting local Swift packages, you’ll gain a well-organized, maintainable, and scalable codebase, making development a breeze for you and your team!

--

--

Saeid Rezaeisadrabadi
Saeid Rezaeisadrabadi

Written by Saeid Rezaeisadrabadi

Over 8 years of experience in iOS software development

No responses yet