Skip to main content

Setting up Firebase manually using SDK

1. Get your Firebase copy

Head over to the iOS Getting Started page, scroll to the bottom and click on the "framework SDK zip" link to download an archive containing all the Firebase frameworks.
Please leave a comment if the link is not valid anymore, and I'll make sure to update the guide with the new location.
I've said frameworks, using the plural, because as you'll see once you'll extract the archive, the SDK comes in a number of focused frameworks. In fact, Firebase offer a number of services, analytics, "realtime" database, notifications, etc... and the team has done a great job into providing a framework for each service, so that developers can mix and match without having to carry extra code they don't need with them.
You'll also notice that the archive comes with a README. The file contains barebone instructions to setup the SDK manually, this post augments them.

2. Copy Firebase/Analytics into your project

The analytics component of Firebase is required for the SDK to work.
That might sound weird but is quite obvious, what did you think that Google would provide such a wonderful suite of tools that you can use for free, at least at the start, without getting something out of it?
In the archive you just extracted you'll find a folder called Analytics. It contains the Firebase Analytics framework and a number of others that are used by it.
Copy the folder in your project's folder.
I would suggest creating a Firbase or Frameworks folder into the root of your project where we'll put all the frameworks and files required by the SDK.
Simply having the frameworks in the same folder as your project doesn't mean you can use them. The next steps will make the frameworks available to your code.
Every guide or screencast I've seen suggest to drag and drop files into the Xcode project navigator tab to import them. I don't like dragging and dropping stuff around, not sure why but it feels sloppy to me 😳.
The way I like to use to import and link frameworks into Xcode 7 and 8 projects is to:
  1. Select the project file in the navigator
  2. Select your app's target
  3. Go to the general tab and scroll to the bottom to the "Linked Frameworks and Libraries" section
  4. Click the "+" button at the bottom
  5. Click "Add others" in the selection window that will appear
  6. Use the Finder window that opened to navigate into the location inside your project's folder where you copied the frameworks, select all of them and click "OK", or press enter
  7. Now your framework have been imported and linked to your project
Step by step external framework linking in Xcode
Because of understandable reasons the Firebase SDK is not distributed as a dynamic framework but as a static one, which means that we can't just embed it after having linked it to have it working. We have another bit of setup left.

4. Import the Firebase header

In the downloaded archive you'll find a file called Firebase.h, copy it into the Firebase folder you created in your project.
Again just having a file in the same folder as the project doesn't mean that Xcode will see it.
To import a file into the project without drag-n-drop:
  1. Go to the project navigator tab
  2. Select the group where you want to add your project
  3. Click the "+" button in the bottom left corner
  4. Select "Add files to YourProjectName"
  5. Use the Finder window that opened to navigate to the location of your file
  6. Select the file and press "OK"

5. Add the -ObjC linker flag

As mentioned above the SDK is distributed as a static Objective-C framework, and as such itrequires the -ObjC linker flag.
Go to your target's "Build Settings" and then into the "Linking" section and add -ObjC in the "Other Linker Flags" row.
You can use the search bar in the top right corner to filter the build settings, saving a lot of scrolling time.

6. Add Firebase.h to the projects bridging header (Swift only)

The way to make Objective-C code visible to Swift is via a bridging header.
If your project doesn't have one already, the best way I found to make have Xcode add a bridging header is to add a dummy Objective-C class and select "Create Bridging Header" in the prompt that will be presented.
Once you have your bridging header, import the Firebase header in it like this:
#import "Firebase.h"

7. Import the module map file (Swift only)

To use the Firebase SDK into a Swift project the header is not enough, we also need the Swift module map file.
Go into the downloaded Firebase folder and you'll find a module.modulemap file. Copy it into your project and import it as you did for the header.

8. Import the Firebase configuration .plist

We're almost done. The project is now configured to link and import Firebase, but we're missing its configuration.
Like other services provider with an SDK, Google uses a convenient .plist file to store its configurations.
If such file is not part of the project the Firebase SDK will throw a runtime error, crashing the app, in order to prevent us from attempting to use it without proper configuration.
This configuration file is generated for you in the Firebase console when you create a new project, and the select "Add firebase to your iOS app".
The process will download the file for you. Once again, copy the file in your project's folder, and add it to the Xcode project.

9. Start using Firebase

This is it. To verify your setup is complete and start using Firebase, import the framework and call the Firebase singleton initialization method.
For example in the AppDelegate:
import UIKit
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        FIRApp.configure()
        return true
    }
}

10. Add more frameworks

You probably are not interested in Firebase just for its analytics.
To add any other component simply:
  1. Find its folder in the archive
  2. Copy it into the project's Firebase folder
  3. Link the frameworks like you did in step 3

Comments

Popular posts from this blog

FirefoxOS, A keyboard and prediction: Story of my first contribution

Returning to my cubical holding a hot cup of coffee and with a head loaded with frustration and panic over a system codebase that I managed to break with no sufficient time to fix it before the next morning.  This was at IBM, New York where I was interning and working on the TJ Watson project. I returned back to my desk, turned on my dual monitors, started reading some blogs and engaging on Mozilla IRC (a new found and pretty short lived hobby). Just a few days before that, FirefoxOS was launched in India in the form of an Intex phone with a $35 price tag. It was making waves all around, because of its hefty price and poor performance . The OS struggle was showing up in the super low cost hardware. I was personally furious about some of the shortcomings, primarily the keyboard which at that time didn’t support prediction in any language other than English and also did not learn new words. Coincidentally, I came upon Dietrich Ayala in the FirefoxOS IRC channel, who at

April Fool and Google Part 2: A Round Up of ALL of Google’s April Fools Jokes

Ok....this post I think will contain all of the pranks I could find  for today. After my last post here http://rkrants.blogspot.com/2012/04/april-fool-and-google-my-favorite.html Last Time I reported Only a handful of the pranks.. Understandable, as it was only the morning. After that I stumbled upon more of them Which I am gonna round up here. Now staring with the list. The very first one is obviously our favourite Google Maps Quest The above is their official video. In a post in Google Plus they say about it as follows  Today  + Google Maps  announced Google Maps 8-bit for NES. With #8bitmaps , you can do everything you'd normally do in Maps—search for famous landmarks and sites around the world, get directions and even use Street View. Just in time for April Fool's Day, Google has introduced Google Maps Quest, a retro 8-bit version of its mapping tool that is... totally awesome. In a characteristically whimsical video, available above, Google emplo

Curious case of Cisco AnyConnect and WSL2

One thing Covid has taught me is the importance of VPN. Also one other thing COVID has taught me while I work from home  is that your Windows Machine can be brilliant  as long as you have WSL2 configured in it. So imagine my dismay when I realized I cannot access my University resources while being inside the University provided VPN client. Both of the institutions I have affiliation with, requires me to use VPN software which messes up WSL2 configuration (which of course I realized at 1:30 AM). Don't get me wrong, I have faced this multiple times last two years (when I was stuck in India), and mostly I have been lazy and bypassed the actual problem by side-stepping with my not-so-noble  alternatives, which mostly include one of the following: Connect to a physical machine exposed to the internet and do an ssh tunnel from there (not so reliable since this is my actual box sitting at lab desk, also not secure enough) Create a poor man's socks proxy in that same box to have my ow