Over a million developers have joined DZone.

Starting Developing in Swift: Using GitLab with XCode

How to integrate seamlessly with GitLab for your Swift projects

· Mobile Zone

Visually compose APIs with easy-to-use tooling. Learn how IBM API Connect provides near-universal access to data and services both on-premises and in the cloud, brought to you in partnership with IBM.

Xcode_iconAs showed in my previous post I have set up a GitLab account so I can host my Git repositories there. In this post I will show how you can combine XCode (v7.1) with GitFlow and GitLab. In fact I will end up to use both XCode (for programming) and the Terminal (for my GitFlow) but that is the same when I am developing Java. In that case I also prefer the prompt most of the time for my (basic) Git stuff.

It takes the following steps to setup your project:

  • Create the project in XCode
  • Create the project in GitLab
  • Link XCode project to GitLab project
  • Init Git Flow

Each step will be showed in more details next.
Create the project in XCode
This is the most easy part. Just create a new project in XCode and make sure that Git is enabled in the project:

Screenshot at Dec 09 15-16-29Screenshot at Dec 09 15-07-20
Screenshot at Dec 09 15-17-05
Create the project in GitLab

Next step is to create a corresponding project in GitLab. This is also quite straightforward:

Screenshot at Dec 09 15-27-12
When the project is created copy the url to the repository:
Screenshot at Dec 09 15-28-25

Now we have two separated project so lets connect them in the next step.

Link XCode project to GitLab project
In this step we connect the two projects together by setting the remote URL for the local Git project. This means that by pushing the local repo to the remote one it ends up in our GitLab repository we just created. To ‘connect’ these two repositories open the ‘Source Control’ menu item in XCode for our new project and navigate to the settings:
Screenshot at Dec 09 15-34-30
Then select ‘Remotes’ and choose the option to add one:
Screenshot at Dec 09 15-35-18

In the popup fill in the name of the remote repo (default called ‘origin’) and the url you copied in GitLab for the new project:
Screenshot at Dec 09 15-37-01

Now you can commit and push your changes to the remote repository from XCode by selecting first ‘Commit’ and then ‘Push’ in the ‘Source Control’ menu:
Screenshot at Dec 09 15-45-38

So now we have XCode and GitLab connected. It’s time to put some Flow into it.

Init Git Flow
Open the Terminal in Mac and browse to the ‘MyGitProject’ directory. Execute the command:

git flow init

to initiate gitFlow for this project:
Screenshot at Dec 09 15-53-37

Now push the changes either in Terminal or XCode to the remote server. As you can see we are now working on our ‘Develop’ branch:
Screenshot at Dec 09 15-58-09
Screenshot at Dec 09 15-57-21

That’s it. If you look into GitLab again you will see our project has now two branches:
Screenshot at Dec 09 16-29-21

The way to go now is to create a feature branche in the Terminal with

git flow feature start SetupStoryBoard

like this
Screenshot at Dec 09 16-32-46

Now make your changes in XCode, commit them and when you are done finish the feature with

git flow feature finish SetupStoryBoard

and push the changes in the develop branch to the remote server.

Lots more of Git fun with XCode can be found here, here and here. More info why GitFlow with iOS here.

The Mobile Zone is brought to you in partnership with Strongloop and IBM.  Visually compose APIs with easy-to-use tooling. Learn how IBM API Connect provides near-universal access to data and services both on-premises and in the cloud.


Published at DZone with permission of Pascal Alma, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}