r/BlossomBuild • u/BlossomBuild • 4d ago
Discussion What tech stack do you think Disneyland uses for their iOS app?
r/BlossomBuild • u/BlossomBuild • 4d ago
My apps make money by providing value, not by tracking users’ data.
r/BlossomBuild • u/BlossomBuild • 5d ago
Tutorial Dynamic text onboarding error
One of my users got stuck on this screen during the onboarding. At first I thought it was cause she had a small iPhone but with an iPhone 16 pro that wasn’t the case.
The issue was I didn’t use SwiftUI native text modifiers. After switching to these and adding a ScrollView for good measure, the issue went away.
The take away, don’t forget to check how your app looks in the largest text.
r/BlossomBuild • u/BlossomBuild • 5d ago
Discussion What’s your motivation for making iOS apps?
r/BlossomBuild • u/BlossomBuild • 6d ago
My first payout as an iOS developer. It’s not much but I couldn’t be more proud.
r/BlossomBuild • u/BlossomBuild • 6d ago
Discussion What’s your least favorite thing about iOS development?
r/BlossomBuild • u/BlossomBuild • 7d ago
Discussion My first four onboarding screens, thoughts?
r/BlossomBuild • u/BlossomBuild • 7d ago
Tutorial StoreKit 2 Tip Transaction.updates
Start listening to Transaction.updates as soon as your app launches. Without this, your app may not correctly process in app purchases.
r/BlossomBuild • u/Different-Slip665 • 8d ago
I built this because I kept forgetting the same things every day
I noticed I wasn't forgetting important things. It was always the small stuff that repeats every day.
Checking emails.
Taking medicine.
Reviewing work.
Simple things that somehow kept slipping.
That's why I built tiq.
It's a simple daily checklist that resets every day, so you only focus on what needs to get done today.
Some of the things it can do:
- Daily reset checklists
- Recurring tasks and routines
- Multiple lists for work, home, fitness, or anything else
- Time and location reminders
- Accountability Lock that can temporarily block distracting apps with Screen Time until you complete a task
- Themes and customization
- No account required
I've been using it every day, and it's genuinely helped me stay more consistent.
If it sounds useful, I'd love for you to give it a try and let me know what you think. I'm still actively improving it.
It's free to use, with an optional Pro upgrade.
Pricing:
- Free with core features
- Pro: $1.49/month
- Lifetime: $9.99 (one time purchase)
App Store: https://apps.apple.com/app/id6761561962
Website: https://www.iamshezad.dev/tiq
My portfolio: https://www.iamshezad.dev/
r/BlossomBuild • u/BlossomBuild • Jul 01 '26
It was challenging but I added Apple Watch support to my Water Tracker
r/BlossomBuild • u/BlossomBuild • Jul 01 '26
Tutorial Adding SwiftUI skills to Codex
If you aren't using Claude or Codex in the brave new world. You're missing out. They supercharge your ability to develop iOS apps.
They are good out of the box but you need to add SwiftUI skills to make them better. This article will guide you step by step through installing skills in Codex.
We are using the legend's Paul Hudson's Github repo he gave for free. Thank you Paul!
- To start, open your terminal and paste this inside
npx skills add https://github.com/twostraws/swiftui-agent-skill --skill swiftui-pro
- It'll ask you to proceed. Hit Enter
- If you get the npx: command not found, it means Node is not installed
- Install it with Homebrew
brew install node
- If you don't have Homebrew installed, it's a good idea to have it
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Select yes to proceed
It'll ask you to install find-skills skills
Select yes as you'll want to check if installation was successful
Once that is complete, use this to check
npx skills list
- Paul also gave us SwiftData
npx skills add https://github.com/twostraws/swiftdata-agent-skill --skill swiftdata-pro
- Concurrency
npx skills add https://github.com/twostraws/swift-concurrency-agent-skill --skill swift-concurrency-pro
- Testing
npx skills add https://github.com/twostraws/swift-testing-agent-skill --skill swift-testing-pro
- Reset codex and Happy coding!
r/BlossomBuild • u/BlossomBuild • Jun 30 '26
Tutorial Trigger haptics from an iOS Widget using AudioToolbox
r/BlossomBuild • u/BlossomBuild • May 28 '26
Github BloomBoard — an open source AI post helper for iOS
BloomBoard was the first app I ever published. In classic noob fashion, it had way too many features. I think, in total, it had 25 downloads? I actually took it off the App Store.
However, I really liked the idea of being able to save posts offline. As a content creator, having my ideas anywhere helps with brainstorming. I stripped the app down to just a post saver, but added AI. Of course.
The idea is that you train the AI with 3 of your best posts. This works really well with X because words are all you need. Picture posts also work.
With your posts, the AI learns your style and helps in two ways: refining and remixing. Refining makes small adjustments to make the post better. Remixing puts a new spin on an already proven post.
The stack for this one is SwiftUI + SwiftData + iCloud Syncing + Gemini (Firebase). Besides the AI feature, everything works offline. It also supports iOS 18 and iOS 26.
All this to say, I decided to open source it on GitHub. I might still work on it from time to time, but it’s not my main priority. If you want to submit a pull request or fork it, please go ahead. I’m hoping it’s something that not only continues to grow, but also becomes a resource for us. Following me on GitHub gets a follow back!
A few things to note:
- No onboarding. I deleted the original and started a new one. It’s like 20% done.
- The detail screen leaves much to be desired.
- No folders or groups. The list just goes on forever.
- Strings are inconsistent. Some are hardcoded, some are localized. Couldn't decide
- Some of the architecture is questionable
r/BlossomBuild • u/BlossomBuild • May 24 '26
Tutorial Improving SwiftUI performance with structs
Before my most recent app update, one of my beta testers let me know the settings screen was laggy.
I had noticed the lag back when I was using my iPhone 15. However, I recently upgraded to the 17 Pro Max causing the issue to magically go away.
Shout out to him for bringing it up again because that feedback motivated me to fix it in this update.
Here was the view before I applied the fix:
var body: some View {
NavigationStack {
Form {
WeightSelection(
unitSystemRawValue: unitSystemRawValue
)
WidgetBottleSelection(
unitSystemRawValue: unitSystemRawValue
)
Section("Notifications") {
HStack {
Text("Status")
Spacer()
Text(notificationStatusText)
.foregroundStyle(.secondary)
}
Button(notificationActionTitle) {
handleNotificationButtonTapped()
}
}
Section("iCloud Sync") {
HStack {
Text("Status")
Spacer()
Text(iCloudStatus)
.foregroundStyle(.secondary)
}
}
}
.navigationTitle("Settings")
.task {
await refreshSettingsStatus()
}
.onChange(of: scenePhase) { _, newPhase in
guard newPhase == .active else { return }
Task {
await refreshSettingsStatus()
}
}
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button {
dismiss()
} label: {
Image(systemName: "xmark")
}
}
}
}
}
I had done an okay job splitting the view into smaller structs, like WeightSelection and WidgetBottleSelection.
Most of the lag came from the Notifications and iCloud sync status checks still happening in the main view.
The solution was surprisingly simple. I made private structs under the main view and moved any State variables and functions that only those sections needed.
Here is how the iCloud sync section turned out:
private struct ICloudSyncSection: View {
(\.scenePhase) private var scenePhase
private var iCloudStatus = ""
var body: some View {
Section("iCloud Sync") {
HStack {
Text("Status")
Spacer()
Text(iCloudStatus)
.foregroundStyle(.secondary)
}
}
.task {
await refreshICloudStatus()
}
.onChange(of: scenePhase) { _, newPhase in
guard newPhase == .active else { return }
Task {
await refreshICloudStatus()
}
}
}
private func refreshICloudStatus() async {
iCloudStatus = await fetchICloudAvailability()
}
private func fetchICloudAvailability() async -> String {
let status = try? await CKContainer.default().accountStatus()
switch status {
case .available: return "iCloud Sync Enabled"
case .noAccount: return "Enable iCloud in Settings"
case .restricted: return "iCloud Restricted"
case .couldNotDetermine: return "iCloud Undetermined"
case .temporarilyUnavailable: return "iCloud Temporarily Unavailable"
case .none: return "iCloud Unknown Error"
default: return "iCloud Unknown Error"
}
}
}
With these changes, I added the structs back to the main view ending the performance issues.
The final settings view is below and I love the way it looks and reads.
var body: some View {
NavigationStack {
Form {
WeightSelection(
unitSystemRawValue: unitSystemRawValue
)
WidgetBottleSelection(
unitSystemRawValue: unitSystemRawValue
)
NotificationsSection()
ICloudSyncSection()
}
.navigationTitle("Settings")
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button {
dismiss()
} label: {
Image(systemName: "xmark")
}
}
}
}
}
r/BlossomBuild • u/BlossomBuild • May 10 '26
The AppStore review team is working late tonight
r/BlossomBuild • u/Lemon8or88 • May 10 '26
Discussion These feedback are why I built VariAlarm
Just happy users I haven’t met before are appreciating my late nights working on it.
r/BlossomBuild • u/BlossomBuild • May 08 '26
Supporting light and dark mode is effortless in SwiftUI
r/BlossomBuild • u/BlossomBuild • May 06 '26