diff --git a/Content/tutorials/tuist-xcode-project-setup.md b/Content/tutorials/tuist-xcode-project-setup.md index da158687..99d5bef5 100644 --- a/Content/tutorials/tuist-xcode-project-setup.md +++ b/Content/tutorials/tuist-xcode-project-setup.md @@ -12,11 +12,11 @@ subscriptionCTA: Want to stay up-to-date with the latest Swift tooling and CI/CD When creating an app, let’s think about what we need to get started. The Xcode project is the backbone of your application — it contains metadata like bundle identifiers and permission text, along with build configuration for your targets, which can include the app itself, frameworks, and app extensions. -The Xcode project uses a _proprietary format_ that is notoriously difficult to work with, especially when dealing with merge conflicts in version control. +The Xcode project uses a _proprietary format_ that is notoriously difficult to work with, especially when dealing with merge conflicts in version control. In the ancient days, it was Storyboards and Xcode projects which were the biggest culprits of merge conflict hell. Coding your UI in UIKit and then SwiftUI eleviated the Storyboard issue but Xcode projects still remain. -This is where a tool which creates the Xcode project is most helpful. There’s 2 leading tools which I’d recommend: Xcodegen or Tuist. Xcodegen is great if you have a fairly simple app or minimal team structure. Xcodegen uses YAML for its specification structure — if you prefer a simpler static config format, it’s the right choice. For a broader look at both tools, see [How to automate iOS development](/articles/ios-automation/). +This is where a tool which creates the Xcode project is most helpful. There’s 2 leading tools which I’d recommend: Xcodegen or Tuist. [Xcodegen](https://github.com/yonaskolb/xcodegen) is great if you have a fairly simple app or minimal team structure. Xcodegen uses YAML for its specification structure — if you prefer a simpler static config format, it’s the right choice. For a broader look at both tools, see [How to automate iOS development](/articles/ios-automation/). -Tuist is what I’d recommend in most any other case. Tuist uses Swift for its manifest files, which is a deliberate design choice — it gives you type-checking and the full power of the language for complex configurations. Tuist has a very robust community and support as well. In the end I’d highly recommend **not** committing Xcode projects to your code repository. +[Tuist](https://tuist.dev) is what I’d recommend in most any other case. Tuist uses Swift for its manifest files, which is a deliberate design choice — it gives you type-checking and the full power of the language for complex configurations. Tuist has a very robust community and support as well. In the end I’d highly recommend **not** committing Xcode projects to your code repository. # Using Tuist @@ -322,7 +322,8 @@ So in our case, our `infoPlist` would look like: This will make it much easier to increment the build number or change the marketing version. -### Ignoring Our Project +--- + This is what we should have for our end result: @@ -366,6 +367,8 @@ let project = Project( This will give us a fully working Xcode project but before we commit this to our repository, **we need to make sure we aren't committing our project and workspace.** +### Ignoring Our Project + If you don't already have a .gitignore file, [toptal has a great resource for creating one](https://www.toptal.com/developers/gitignore). I even have a url I download from everytime: ``` diff --git a/Package.resolved b/Package.resolved index e3b8a1ea..4f248cf0 100644 --- a/Package.resolved +++ b/Package.resolved @@ -50,8 +50,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/CoreOffice/XMLCoder", "state" : { - "revision" : "5e1ada828d2618ecb79c974e03f79c8f4df90b71", - "version" : "0.18.0" + "revision" : "b2b5d72345bab9e1938a483cf862b498aeed3796", + "version" : "0.18.1" } }, { diff --git a/Styling/styles/styles.css b/Styling/styles/styles.css index 7c6a9532..bc6e617f 100644 --- a/Styling/styles/styles.css +++ b/Styling/styles/styles.css @@ -5,6 +5,10 @@ @tailwind components; @tailwind utilities; +html { + overflow-x: hidden; +} + ._button_normal { @apply text-gray-800 bg-bellow-500 p-2 rounded-lg no-underline; &:hover { @@ -73,7 +77,7 @@ body.more-active { @apply relative z-0; } & > header > nav { - @apply bg-white w-screen absolute top-0 left-0 right-0 p-2 flex flex-col items-stretch bg-opacity-90 z-50 duration-1000; + @apply bg-white absolute top-0 left-0 right-0 p-2 flex flex-col items-stretch bg-opacity-90 z-50 duration-1000; transition-property: top; @apply shadow-lg; & > ol.more { @@ -1276,7 +1280,7 @@ body.articles, body.tutorials { img { @apply w-full mt-4 h-40 object-cover sm:h-48 md:h-64 lg:h-80 xl:h-96; &.full-size { - @apply w-auto h-auto; + @apply w-auto h-auto max-w-full; @apply xl:max-w-2xl xl:mx-auto; } &.contained{ @@ -1312,7 +1316,8 @@ body.articles, body.tutorials { @apply my-4; } pre code { - @apply whitespace-pre-wrap text-xs font-extralight p-4 bg-gray-900 text-white block my-4 lg:text-base lg:p-8; + @apply whitespace-pre-wrap text-xs font-extralight p-4 bg-gray-900 text-white block my-4 lg:text-base lg:p-8; + overflow-x: auto; .keyword { @apply font-bold;