skip icon indicating copy to clipboard operation
skip copied to clipboard

`skip create` uses the term "project" incorrectly

Open dfabulich opened this issue 5 months ago • 0 comments

% skip create
Welcome to Skip 1.6.5!

Select type of project to create:
  1: App: mobile application for Android and iOS
  2: Library: library project with one or more modules
Enter selection (default: App) [1..2]
Select the mode of the project:
  1: Skip Fuse: natively compiled project
  2: Skip Lite: transpiled project
Enter selection (default: Skip Fuse) [1..2]
Enter the project-name for the App: project-name
Enter the CamelCase name of the App module: ModuleName
Optionally enter additional module names:
Enter the app bundle identifier: bundle.id
  • It starts by asking what kind of "project" I want to create, but SwiftPM packages are not projects. (A "project" is an .xcodeproj folder.) It's incorrect to call a SwiftPM "package name" a "project name."
  • When you generate the app, the generated workspace is named Project.xcworkspace, but that's a workspace, not a project.
  • skip create prompts the user for a "module name" and then names the generated Xcode project after the module, giving two different things the same name, which is confusing.

I think it's really important to use the right terms for these things, because it's very difficult to Google for questions about Xcode structure when we're vague/approximate with the terms.

Here's my ideal conversation with skip create:

What do you want to create?
  1: App: mobile application for Android and iOS
  2: Library: SwiftPM library package with one or more modules
Enter selection (default: App) [1..2]
Select the mode of the app:
  1: Skip Fuse: natively compiled
  2: Skip Lite: transpiled to Kotlin
Enter selection (default: Skip Fuse) [1..2]
Enter an app bundle identifier in reverse-DNS format, e.g. com.mycompany.appname
App bundle identifier: com.mycompany.appname
Enter a CamelCase name for the Xcode workspace: WorkspaceName
Enter a CamelCase name for the Xcode app project [WorkspaceNameApp]: WorkspaceNameApp
The WorkspaceNameApp app project will depend on a "core" SwiftPM package.
Enter a CamelCase name for the app's core library module [WorkspaceNameAppCore]:
Enter a hyphenated-name for the app's core SwiftPM package [workspace-name-app-core]: 
You can optionally create additional SwiftPM library modules in the workspace-name-app-core package.
(You can also add additional SwiftPM packages to the workspace, by running `skip create` in the WorkspaceName directory.)
Optionally enter additional CamelCase library module names: AdditionalLibraryName
Optionally enter additional CamelCase library module names: 

The output would look like this, in a folder named after the workspace:

WorkspaceName/WorkspaceName.xcworkspace
WorkspaceName/Darwin/WorkspaceNameApp.xcodeproj
WorkspaceName/Darwin/Sources/Main.swift
WorkspaceName/Package.swift
WorkspaceName/Sources/WorkspaceNameAppCore/WorkspaceNameAppCore.swift
WorkspaceName/Sources/AdditionalLibraryName/ViewModel.swift

Or, apropos #453, it would be even better if it looked like this:

WorkspaceName/WorkspaceName.xcworkspace
WorkspaceName/Darwin/WorkspaceNameApp.xcodeproj
WorkspaceName/Darwin/Sources/Main.swift
WorkspaceName/workspace-name-app-core/Package.swift
WorkspaceName/workspace-name-app-core/Sources/WorkspaceNameAppCore/WorkspaceNameAppCore.swift
WorkspaceName/workspace-name-app-core/Sources/AdditionalLibraryName/ViewModel.swift

dfabulich avatar Jul 21 '25 22:07 dfabulich