Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Shared code base for iOS and OS X development

We have a fairly rich e-learning app, built mostly using cocos2d. Currently we are in alpha and want to setup our project structure so we can also build a Mac version to target the Mac App store. It is about 80% cocos2d with some intitial screens in UIKit which will have to be ported to Mac (re-written).

What is the recommended setup for targeting both the Mac and iOS app stores from a single code base? I assume the choices are:

  1. Create 2 xCode projects in the same application source code root folder and use each project to build a single target. This would be: Project.xcodeproj and ProjectMac.xcodeproj
  2. Add a new Mac target to our existing iPad application project and then fiddle with target membership to get the desired results. This would be just: Project.xcodeproj

Further complicating the situation is that we currently use cocos2d as a static library for the iOS app. We also have a library called CoreInfrastructure that has a lot of code we use across all our projects. Recently I have figured out that I can create a project to simultaneously build a framework targeting Mac and a library targeting iOS from the same code base. This is done by starting with a framework project and adding a target to build a static lib for iOS.

So just wanted to get everyone's opinion and insight. Anyone know of any caveats to watch out for in the above choices? Anyone who is building for Mac and iOS app stores simultaneously care to share their structure? Adding a target worked on our library code ... is that the way to go for the application as well?

Are there any issues doing archive and distribution builds for either choice?

Thanks in advance.

like image 844
poundev23 Avatar asked Aug 01 '12 22:08

poundev23


People also ask

What code is iOS based on?

Swift is a robust and intuitive programming language created by Apple for building apps for iOS, Mac, Apple TV, and Apple Watch. It's designed to give developers more freedom than ever.

Can you write code for Android and iOS in the same codebase?

Released in 2018 and backed by none other than Google, Flutter is the most modern and powerful development framework on the market…. and it allows developers to use the same codebase to write apps for Web, Android and iOS (and Windows and MacOS if you're interested).

Which platform is used for iOS app development?

Developer RequirementsXcode is Apple's IDE (Integrated Development Environment) for both Mac and iOS apps. Xcode is the graphical interface you'll use to write iOS apps. Xcode includes the iOS SDK, tools, compilers, and frameworks you need specifically to design, develop, write code, and debug an app for iOS.

Can you write code on iOS?

Textastic is another comprehensive app that ranks as one of the best in the industry for coding on iOS. Much like Koder, this code editor allows you to write in over 80 different languages. It's also compatible with TextMate and Sublime Text 3.


3 Answers

WWDC session "Sharing code between iOS and OS X" answers all the basic questions in this topic. iWork team presented how they have got away with creating Pages, Keynote and Numbers with shared code base for both iOS and OS X.

The key for their project was using:

  • separate Xcode targets for iOS and OS X
  • separate project for the shared code in a form of a .framework
  • target dependency on the framework from the point above

I encourage to watch the video or read the transcript from this session:

WWDC 2014 Sharing code between iOS and OS X

ASCIIWWDC transcript

like image 65
Tomasz Bąk Avatar answered Oct 19 '22 23:10

Tomasz Bąk


I recently used kstenerud's iOS Universal Framework to build a shared framework codebase that works for both iOS and Mac apps. I just needed to manually add a target for a Cocoa framework after I had created a project for an iOS framework. That way I can develop the sharable code once in the framework and link it in both the iOS and Mac apps. You can even make the framework contain UIKit-specific code for your iOS app and AppKit-specific code for your Mac apps. I wrote about it in my blog if you are interested.

like image 24
Raymond Law Avatar answered Oct 20 '22 00:10

Raymond Law


For the applications use two separate projects. Using multiple targets for iOS and Mac in one project is very useful if they are sharing a library or framework. However, in your top level application almost nothing is shared. The UIKit code will need to be totally rewritten to use AppKit, the dependencies will be different, and even most of the project settings will vary.

Of course if you really want to see everything at once you can put both platform specific application projects and all the shared dependent library/framework projects in a single workspace. This is more a question of work style. If you want to switch back and forth between the two frequently this makes the most sense. If you want to simplify what you are looking at you can put them in separate workspaces that share many of the same projects. Separate workspaces has the disadvantage that a project can only be open in one workspace at a time so you effectively can only work on one at a time.

like image 38
torrey.lyons Avatar answered Oct 19 '22 23:10

torrey.lyons