How I made iOS broadcasting app in couple of days
Hey, my name is Alex Polymath.
My primary skill is front-end development. And I’m not a Swift expert at all.
But when you work on a startup you just push yourself to work on things you have no experience with.
So my next experiment was making small iOS app for live streaming.
So, here are a couple of screenshots. Nothing smart, ha.
Chapter 1 — Psychological aspect
From time to time we all have fancy ideas. But most of them are never done.
The most frequent reason is that your idea looks shiny and cool. But when you start to implement some stuff, it doesn’t look so shiny and cool. There is always some technical risks. So you drop the idea in the middle of the way or spend stupid amount of time for implementing it.
Same happened to me many times.
I could spend few months for making this app, because:
- I’m not a Swift developer -> So I could spend few weeks for learning basics.
- Because I don’t know how to handle screen rotation so that library I was using worked fine -> Just stick to one screen position
- Because translatesAutoresizingMaskIntoConstraints works very strange, so that you can’t set up specific size of the elements -> Just use view.bounds.midX to position elements.
- Because I need registration -> I don’t need registration
- Because I need about page -> I don’t need about page
- etc
It’s kind of a hard thing to make simple things, because you thing it will be ugly. But most of us were taught in school to make things good and with effort.
Chapter 2— Swift parts
There are few simple things I needed for my app:
- library for RTMP streaming
- Persistent storage (Core Data)
- Display UITextField and UIButton and align them in the center of the screen
- Navigate between UIViewControllers
Stage 1 (3–4 hours)
So first of all I needed ios rtmp streaming library. Fortunately there is a good one LFLiveKit. Swift demo is pretty straightforward. All you need to do is create blank project and install library via pod.
# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'
target 'RTMP Streamer' do
# Comment the next line if you're not using Swift and don't want to use dynamic frameworks
use_frameworks!
pod 'LFLiveKit'
# Pods for RTMP Streamer
end
Library is super cool. I just created separate UIVIewController and copied swift demo.
Stage 2 — Persistent storage
For some reason it was kind of a struggle for me to find easy way to save simple string. I used Core Data Metadata. I took me a while to google proper way to make it persistent. All my app needed is just simply save a string
func StorageSave(key: String, value: String){
let appDelegate = UIApplication.shared.delegate as! AppDelegate
let context = appDelegate.persistentContainer.viewContext
let store = context.persistentStoreCoordinator?.persistentStores.first
let coordinator = context.persistentStoreCoordinator
if let store = context.persistentStoreCoordinator?.persistentStores.first {
let metadata = fillMetadata(store: store, key: key, value: value)
store.metadata = metadata
do {
try coordinator?.setMetadata(["push_url": value], for: store)
try context.save()
} catch {
}
}
}
Stage 3— Align UITextField and UIButton
First I tried to make it easy way with constraints like this.
myView.translatesAutoresizingMaskIntoConstraints = true
myView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
myView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
But this way didn’t work for me because I wanted specific size of button and textfield. While translatesAutoresizingMaskIntoConstraints makes it really difficult.
So then I found super simple way
myView.frame.origin.x = view.bounds.midX - myView.bounds.midX
myView.frame.origin.y = view.bounds.midY - myView.bounds.midY
Stage 4— Navigate between UIViewControllers
Fortunately it was the easier part.
-
First you just add navigation controller:
Open story board -> select UIViewController -> Editor -> Embed In -> Navigation Controller. -
Then create storyboard id for each uiviewcontroller
- And the final part — just push to another screen with this command.
let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "streamingpage") as? UIViewController
self.navigationController?.pushViewController(vc!, animated: true)
Full code & contacts
You can buy the full project source code here just for 9$
For those got bought the project receive 50% discount for my mentor session
https://www.codementor.io/@alexander-k
Follow me in twitter
@alexpolymath
I think your application will be a success because Livestream is gaining momentum more and more. This is a great way not only to make money, but also to promote your brand and product. I also decided to use streaming for this purpose, especially since anyone can do it. This blog helped me get started https://livestream.studio/ Absolutely free, I found all the information and advice for beginners. It helped me to decide and try streaming, and I’m already making some progress in this.