Cocoanetics
993 FOLLOWERS
Oliver Drobnik describes Cocoanetics this way: "Our DNA is written in Objective-C!". You'll find many useful, yet detailed code examples, and learn a great deal of stuff related to Objective-C.
Cocoanetics
10M ago
Next month marks the 10 year anniversary of BarCodeKit. It’s been like two years of slumber since the last release. It was available via Cocoapods and direct via GitHub, but lately several developers voiced interest for it to be available as Swift Package.
Like most of my open source frameworks on GitHub, BarCodeKit is written in Objective-C, but that doesn’t mean it couldn’t be available as Swift Package. Xcode automagically morphs everything to look Swift-native and so an implementer of such a package wouldn’t be the wiser.
To make it a Swift package I needed to clean up some ways how system ..read more
Cocoanetics
1y ago
I was asked by my wife to describe what I do so that she can send it to a friend who is apparently finding people for companies in Japan. It’s no secret that I have a love affair with GPT4.
So I sat down and gave GPT as much context as I could, adding a few more bits and pieces as I thought about them. Here’s the first version. Quite good, I think, couldn’t have written it better myself.
About Me:
Experience: Over 13 years of experience in iOS and Mac development.
Specialization: Swift, SwiftUI, AI Integration in app development, Git for source code management, and technical writing.
Location ..read more
Cocoanetics
1y ago
This is a maintenance release, after the previous one was more than a year old. There were a couple open pull requests which I merged.
Changes
Changed DTTextAttachment to be a subclass of NSTextAttachment to avoid some crashes.
Remove the checking of tiled layer in DTAttributedTextContentView.
Removed unneeded constant causing a warning
Added support for underline color
Added ability to pass in a UIFontDescriptor for DTHTMLAttributedStringBuilder
On the first change I think there might be some further work necessary to actually use the native sizing functions correctly. DTCoreText was starte ..read more
Cocoanetics
2y ago
There is a parent progress that has a total unit count of 1000 units. A child progress was added with pending unit count 1000. When the child progress’ completed unit count is updated, then the fraction completed of the parent is updated, but the completed unit count is not.
Submitted as Apple Feedback FB9803982. The beautiful sample app can also be found on my RadarSamples repo.
Steps to Reproduce
run the attached Sample App on iPhone Simulator
Drag the slider slowly to the right. Notice that only the parent’s fraction completed changes.
Continue dragging the slider to the right maximum. Not ..read more
Cocoanetics
2y ago
I was trying to recreate an existing user interface view in SwiftUI but got stumped for a while by some erratic behavior. I’ve built a nice sample app which is also on GitHub. This has been filed as FB9715757.
Description
If you have a List with movable rows that has a Textfield in its rows there is an issue if you try to move a row while it is first responder.
Steps to Reproduce
Please run the provided sample app on iOS 15 simulator.
Tap on the item titled ‘One’ below and modify the string.
Use the item’s reorder handle to move it into second position.
Drag it back up into first position.
E ..read more
Cocoanetics
3y ago
You can now fully operate SpeakerClock with no or low vision. We gave SpeakerClock the full Accessibility treatment. In this article I describe some of the things I learned adding accessibility features to SpeakerClock, now that it is fully written in SwiftUI.
SpeakerClock’s UI is divided into 3 sections, the presets at the top, the LED timer as big as possible in the center and the phase “traffic light” at the bottom.
The main interaction gesture is to horizontally swipe over the LED digits to change the timer. This kind of gesture is not possible when VoiceOver is active because there you ca ..read more
Cocoanetics
3y ago
I’ve been busy since I completely rewrote SpeakerClock in SwiftUI. That was version 1.2.0.
The App Store provides a concept called Universal Purchase, which is where purchasing an app on one device also unlocks it on all other supported platforms. In the previous version I added a Mac version. This update now adds the AppleTV version. Still a minor update, because the functionality is identical, yet all three versions benefit from improvements.
As on the other platforms I wanted to keep the UI identical, while optimising for the screen dimensions at hand. The main challenge was that contrary t ..read more
Cocoanetics
3y ago
When I started out developing iOS apps, 11 years ago I put several apps on the App Store. Since they became fewer and fewer as the income from them didn’t warrant updating them. Amongst those my most successful one was iWoman, which I sold in 2015. My second-most-valuable (in terms of revenue) remained my beloved SpeakerClock, the last app standing.
I had left SpeakerClock online for the main reason that it kept producing like an average of $100 per month, even without me doing anything on it. For that reason, I didn’t want to make it free, but rather put it to a relatively high price tag of ..read more
Cocoanetics
3y ago
This is a maintenance release mostly fixing build issues.
Changes
FIXED: Some weak support issues
FIXED: Some warnings
FIXED: Enabled bitcode
FIXED: Missing weak for DTAccessibilityElement and view proxy
FIXED: [Demo] About VC didn’t set correct content inset
FIXED: Select correct fallbackFont with matching traits when multiple are available
FIXED: Check for default font
NEW: [Demo] Demonstrate dark/light mode adjustment on About Box
Thanks to Marcin Ugarenko for his generous contributions.
The update has been tagged on GitHub, pushed to Cocoapods trunk and is also available via SPM ..read more
Cocoanetics
3y ago
This is a maintenance release fixing mostly build issues.
Changes
FIXED: Enable building with bitcode
FIXED: reduce iOS deployment target to 9
FIXED: DTWeakSupport was sometimes not found when building as part of DTCoreText
FIXED: [DTASN1] Due to mismatch with protocol the parser was ignoring start end end messages for context
The update has been tagged on GitHub and was pushed to Cocoapods trunk. It’s also available via SPM ..read more