Safety over efficiency
The stock Photos app for iOS lets third party apps modify photos in its library since iOS 8. Metapho uses this PhotoKit API and the first rule of modifying asset is No one is messing with the original asset. The original file itself is untouchable for a third party app. Even Photos does not change it when you edit an item in Edit menu.
Instead of overwriting original files, PhotoKit asks an app for edited version of the file and saves it in addition to the original as one bundle. This takes more storage space than editing original directly, but helps users to revert to the original state even after numerous edits are committed by Photos or third party apps.
Under this constraint, it is not possible to just modify metadata part of an image file in your library. Metapho has to make a whole new image with modified metadata and give it to PhotoKit. In this process, PhotoKit only accepts image file in specific format. It is very picky on saving edited version. It has to be JPEG with baked-in orientation. For this reason, when you edit metadata with Metapho, the app rotates and re-renders image, if it does not have top-left orientation.
PhotoKit and metadata
When you take a photo or import one, Photos adds creation date and location metadata of the photo to its own metadata database. While this makes it easy to access and modify these metadata, it also makes it possible to have two different set of metadata in Photos database and the image file.
For example, when some app—including Photos for macOS—removes location of a photo, it edits the PhotoKit’s own metadata only, and creates location removed image file on the fly when you export it within the app. If you share the photo with other app like Photos for iOS, it will provide unmodified original image that has location data in it.
Metapho can detect location metadata conflict and show a warning like this.
⚠️ This location is marked as removed. To remove location from metadata, tap Edit > “Remove Location” button.
If you’ve removed location with Metapho, it’s hard to accidentally share location tagged image, via Metapho or other apps. Since the app changes PhotoKit’s database and makes an edited version of the image without location metadata.
Rewrite Date Tags option
I thought that the creation date is less sensitive metadata than location, so I added “Rewrite Date Tags” option. If the option in Date Edit screen is turned off, Metapho behaves like Photos for mac, does not create a new image with edited date tag, and just adjusts metadata managed by PhotoKit.
When you open a link to this blog’s RSS feed in Safari for iOS, it opens Apple News and spits out some error like "Content Unavailable". I’ve been trying to fix this by applying Apple News publisher as a channel. But here’s reply from Apple News.
Thank you for your interest in Apple News. Unfortunately, Zininworks doesn't comply with our Apple News guidelines:
The channel contains content that promotes a service, or is focused on product sales, sweepstakes, or contests.
Apparently, a company blog cannot be on Apple News. Now I know why MartianCraft suddenly disappeared from Apple News.
My humble word learning app, Wordio is just updated to 1.1 version. What made it worth the .1 update? Definition look up in Apple Watch app.
Before I received a feature request email and experimented with the feature for a day by myself, I thought handoff to iPhone for definition was enough for a watch wearing word learner. Turns out… I was wrong. It feels great to bring up definition of the words directly on the Apple Watch, especially on the Series 4’s larger screen.
It made me jump through many technical hoops and it’s not rational in financial sense, but well… Wordio has always been a product of love. I use it everyday. If you’re like me and want to collect new words and recite them like crazy person, you should, too.
Metapho 3.2 is a major update, with some nice new features and lots of bug fixes and small improvements.
- Asset Manager
Photos manages multiple resources of an item as a bundle for edited item, Live Photo, Portrait photo, and RAW+JPEG. Asset Manager reveals underlying files if multiple assets are available for the item. It makes easy to check and export assets. It just takes few taps to extract MOV file from a Live Photo, or to check original photo’s metadata with Metapho App Extension in Metapho. (Insert Inception OST here)
- Raw Metadata See All
In Camera section > See All, raw dictionary representation of metadata as keys and values without formatting, is available. Now it’s possible to copy each value, section, or entire metadata dictionary.
- Save As…
Since the default file naming is’t very meaningful in the Apple Photos, file renaming is one of the most popular feature requests. However, it is not possible to rename already-saved photo in the photos library. Now, 3.2 offers Save As… feature, which lets you save a copy with a new name you enter. Life sometimes gives you renaming in the form of Save As + delete original combo.
Bug Fixes and Improvements
- Live Photo is supported for iCloud Shared Album in the app extension
- Exports HEIC as HEIC, in Share without Metadata > Save to Files and similar sharing actions
- Improves VoiceOver supports for accessibility
- Fixes some crashes caused by exporting a large HEIC image in Action app extension
- Fixes color profile bug where editing sRGB image converted it to Display P3 in some devices
- Adds User Comment field under Camera section
- Displays "/" instead of ":" for file name
Buy Me a Coffee
If you’ve made it this far and want to express your love for the app even more, you can buy me a coffee. https://www.buymeacoffee.com/joyh
It has been long and cold winter here. So I don’t have anymore willpower to write a dedicated blog post. I’d just copy paste App Store update note for Metapho 3.1.
- Pinch to zoom just like it’s 2007
- Shows bit per component and color profile info
- Supports Loop and Bounce Live Photo
- Safe Share exports a looping video from Loop and Bounce Live Photo
- Safe Share exports HEIC for supported actions such as Metapho, Gladys…
- Animated GIF is animated by tapping the play button
- Shows count of the Location and Favorite filtered results
- A Live Photo, edited by Metapho, then shared to Messages by Photos, appears normally on Messages
- Fixes sharing for edited videos
- Fixes an issue that prevented re-editing of edited videos
- Fixes an issue that hid the bottom toolbar when navigation back gesture was cancelled
- Share without Metadata preserves Display P3 color profile
- Fixes a crash caused by using Action extension’s save image action before granting Photos permission to the main app
- Faster filtering by location
- Location filtered result is refreshed after assigning or removing location of an item
- Batch Editing does not deselect selected items if possible, after an edit is finished
Today, I’m feeling extreme meh to announce Mehssages. It is a brand new app enables SMS filter for unknown senders.
I have very low tolerance for unsolicited incoming things on my iPhone. My default choice for notification permission for a new app is Don’t Allow. For emails, I’m a long time happy customer of MailRoute.
For SMS, I had to use a carrier-provided slow and ugly spam filter app. But not anymore. Thanks to the iOS 11’s new Messages filter extension, I made an app that filters SMS and MMS from unknown senders into a separate, muted list in the Messages. These unsolicited meh-ssages (did you get it?) do not make notifications and land in the SMS Junk list silently. A filtered message does add badge count of the Messages, so I can check them when I need.
By default, Mehssages filters every SMS and MMS from numbers not saved in the Contacts. What about important messages from unknown senders, like bank statement or credit card usage or verification code for 2 step authentication? There’s Whitelist for that. You can whitelist certain phone number or message body text. An iMessages app is also included for convenient whitelisting without leaving Messages.
Attention is precious and fragile resource. You’ve already wasted fair amount of it by reading this. Do not add spam messages to the mix. Mehssages is available on the App Store.
After long wait, 3.0 has new features probably make long time users shout out “finally”.
Since the beginning of Metapho, Video support is the most requested feature. This summer, I finally made the app could read and write video metadata, in a similar way photo metadata handled. Date / Location Edit, Safe Share, Batch Editing… all works with videos now.
Improved Action extension
From iOS Share Sheet, You can activate the Action extension with multiple items selected. Select photos and videos as many as you want in Photos, open Metapho Action, swipe side by side to navigate.
For Live Photos, Action extension also plays short live photo preview, and 3D touch for play works, too.
3.0 adds My Album and Smart Album support. And there are location and favorite filters, too. I’ve merged albums and filters together, so that each album could be filtered by location or favorite filter.
The app performance is finely tuned for faster, smoother, and more responsive experience.
It shows locally available information first when download from iCloud Photos Library is in progress.
For a long running operation, the app reports more accurate progress.
A third party app which edits a photo in the Photos Library, has to normalize image orientation to 1 for in–place save. This means, even for a simple metadata editing, the app must render and compress the photo as a new jpg again. Metapho used to apply a moderate compression rate for re–rendering, which leads to reduced file size for some large photos with low rate.
Metapho 3.0 does not re–render the photos that already have normal orientation, and uses higher compression rate for non-1 oriented images. Since JPEG to JPEG is lossy conversion, I think this is right way to do compress under current OS constraints although this causes not–so–ideal storage usage.
For Safe Share, the constraints above does not apply, so Metapho just replaces metadata part of the JPEG file, writes it to the temporary space, then shares the file.
Removal of Edit extension
When the Metapho 1.0 was released, iOS 8’s app extension was still in the very early stage, so there was confusion among devs — and App Store review team also — where to put what extensions. Out of that chaos, Metapho started with Edit extension only, but quickly added Action extension. Edit extension is not an ideal place for Metapho because Photo Edit extension point does not allow third party apps to change the photo asset’s metadata in Photos Library database. There has been ugly and unreliable workaround for this limitation.
To sort things out, Metapho 3.0 removes Edit extension. To edit metadata, use Open in Metapho button in the Action extension. Metapho can do much better job changing Date / Location data than Edit extension.
Changes, Improvements, and Bug Fixes
- File extension for Safe Share is changed to jpg from jpeg
- Delete current item button is available on the bottom toolbar
- Shows more granular shutter speeds
- Photo grid cells fit more nicely on the various adaptive sizes
- Reverting to the original date restores sub-second precision
- Supports Open in Google Maps…
- Going back to photo grid is easier with screen edge swipe gesture
- Fixes Safe Share to Messages bug, showing black preview image
Download on the App Store
English is not my first language. Unfortunately, it is the essential language for app business and tech community, and so many entertainment and learning materials are provided only in English.
When I decided to make myself a programmer, improving my English–reading skill was very important. Extending my vocabulary was one of the key things to do. I read written English contents mostly on the iOS devices and Mac. And they have excellent built–in dictionaries. I did constantly look up a new word only to find that it was not a new word, and I just forgot that I already looked it up before. I need to collect and keep track of new words I have looked up, so I made an app for that.
Whether I’m reading something on iPhone, iPad, or on the web, I can easily collect a new word using iOS app or recently created web app. CloudKit keeps everything in sync in background. Wordio complications for Apple Watch forces me to be exposed to those words whenever I glance my watch face. The app has been very helpful for me to improve my reading1.
For a casual life–long english learner like me, managing already-looked-up-words could not be overemphasized. If you’re interested and ready to pay $2.99 to see if it’s for you, you can buy Wordio on the App Store.
Version numbering could be arbitrary sometimes. Many things have been changed under the hood for this huge point update.
Download on the App Store
Memory usage for an app extension is very constrained. For an app extension handling images like Metapho, it is easy to be killed by OS and fail to launch, unless the app extension manages memory usage carefully.
A JPEG file stores its metadata in the head. If Metapho Action extension gets the location of the file, there’s no reason to load entire image data into memory. Just reading head section for metadata would be sufficient. By doing this, Action extension can show a very large image like this.
Similar stuff also applies to sharing. Now, Metapho exports metadata modified file in a memory efficient way so that you can Safe Share a huge image in Action extension.
Cameras made by Fuji Film have special custom metadata, Film Mode. It seems like that dozen of film simulation modes are valuable metadata for Fuji Film camera owners. After digging into custom note section of the photo and studying camera manuals, I could extract Film Mode and put it on the camera info section.
RAW and iCloud Photos Library
Apple says iOS and RAW are not very friendly. In the host app, Metapho tries to get RAW assets if they are available locally or on the iCloud Photos Library. In the app extension, iOS Photos app sometimes gives the app extension RAW, sometimes JPEG. If only JPEG is available in the Photos app, the app extension uses provided JPEG and will not try to retrieve underlying RAW.
iOS 10 lets capable devices capture in RAW. The result is DNG, Adobe digital negative file format. Unfortunately, iOS does not have DNG decoder and just treat it as a small thumbnail. Metapho reads DNG metadata and at least shows original pixel size of the image. It’s not possible for now to edit or share an original size image directly from a DNG file in Metapho. If you really want to handle DNG in iOS you should convert DNG into JPEG first, using DNG develop apps like Lightroom or Camera+.
Small changes and fixes
- Metapho ignored a photo’s orientation when it showed pixel dimension info. For a portrait photo, EXIF width is actually height. Now the app swaps height and width for rotated orientation.
- Sometimes Map View got confused and gave us wrong compass icon. Not any more.
- Reports 0.303030303 shutter speed as 1/33s not 1/30s.
Free Trial on the iOS App Store
Atelier is updated to 1.2, and the app is changed to free (to download). Upon the first launch, you can choose between paying full price upfront, or making $0 In–App Purchase for 7 day free trial. With free trial, you can try all the features of Atelier for a week without paying regular price—currently $4.99.
After years of underwhelming sales, I found out that paid app model is not the best way to sell a simple and focused drawing app like Atelier. Or is there any good way to sell an app like this? We’ll see. You can try it on the App Store.
- Fixed brush width slider percent bubble misalignment
- Fixed visual glitch sometimes created by closing main menu
- Fixed a color composition bug caused by layer opacity