I started making my first iOS app, LinguaBrowse, on Feb 5th 2017 (at precisely 12:34:53, if we date from my first version's commit). Originally, the project was called 'Pinyinjector' (ie. a tool to inject pinyin into a webpage), inspired by the old Furigana Injector Firefox/Chrome extension, and was merely conceived as a personal tool to help me read the Chinese characters on Weibo. Soon I found that I wanted more and more features (eg. tap-to-define, tap-to-speak, disable links, etc.), and it became clear that with a bit of polish (to make an understatement), this could become an app for anyone learning any language. What followed was an exhilarating (yet ceaselessly stress-inducing) learning experience that continues to this day.
8th: πSomehow neglected to add support for Hindi (its 'hi' language code looks a lot like Hebrew's 'he'); 31 languages now supported!
8th: πAdded a check for currently-installed system dictionaries in the Configure menu.
6th: π¨βπ¬Found unique terms by which to identify each system dictionary individually.
4th: πΌLoading/error indicators added for In-App-Purchases.
2nd: πAdded option to toggle Text-To-Speech.
30th: πFinally got an excuse to use HTML DocumentFragment for DOM manipulation.
30th: πFixed inline elements like links forcing linebreaks for Western languages.
24th: πFixed the ad banner for iPhone X (toolbar and navbar issues).
23rd: πFixed the ad banner for iOS 11 (layout guides became deprecated).
18th: π¨βπ¬First successful sandbox purchase.
17th: πΌMade the basic UI for In-App purchases.
16th: π€Wrote the fundamental code for In-App Purchases.
02nd: πSigned up for Apple Developer account.
31st: πRefresh button added.
30th: π€State of purchases (future feature) securely stored in keychain.
29th: π©βπΌTerms of Service and Privacy Policy presented at first launch.
27th: π€Adverts now removable.
23rd: πDetermined which dictionaries are supported for which language (out of 841 possible pairs).
22nd: πΌElements in Configure menu now hide/show when applicable.
22nd: π¨βπ¬Configure menu converted to UIStackView to allow hiding/showing elements.
21st: π¨βπ¬Major cleanup of Configure menu to keep me sane.
19th: π¨βπ¬Persisted user settings refactored to keep me sane.
18th: πΌStartup screen (rather than white).
13rd: πDictionary definitions customisable to any language (not just English!).
06th: πΌAds resize upon rotation.
30th: πFinally added support (however limited) for all 29 languages!
30th: πΌConfiguration menu revamped.
23rd: πFinally finished Action Extension feature thanks to STUDIO BEATNIX (see below)!
12nd: π¨βπ¬Started attempts to add "Open in LinguaBrowse" 'Action Extension' feature.
12nd: πError messages added for web navigation issues.
12nd: πPreference for transcriptions visibility now persisted between navigation (and app restart)
09th: π€Adverts added and animated upon entry/exit.
08th: πSuppressed popovers during segues.
02nd: πDay of optimisation: Memory management for Japanese tokenisation greatly optimised (up to 200 MB saved for several seconds for gigantic articles).
01st: πFeatures from 14th June unbroken.
25th: πFallback dictionary preloads from startup.
17th: πSupport for abbreviated URLs in searchbar.
14th: πPopup dictionary prevented from opening if link is pressed.
14th: πFinally able to use back/forward whilst links are disabled.
04th: πΌIcons drawn for all items in toolbar, finally removing all emoji from interface.
03rd: πSupport for viewing PDFs (with text) without downloading to cache, as long as it uses Western characters.
27th: πSupport for viewing PDFs (without text) without downloading to cache.
26th: π¨βπ¬Discovered how to download PDF to app's cache.
25th: π¨βπ¬First proof-of-concept for a rudimentary PDF handler (no text).
24th: πUsers able to customize font size with preview.
17th: πFallback dictionary functionality finally added.
16th: πΌIcons drawn for most of tools in toolbar.
14th: πΌLogo finally drawn!
13rd: πΌNotifications added via the life-saving PKHUD library.
12nd: πJapanese voice now speaks the same pronunciation as was transcribed (sometimes differed).
08th: πΌLost a whole week trying and failing to add branding in the navigation bar.
01st: πKatakana no longer redundantly transcribed using hiragana.
30th: πMeCab Japanese tokeniser integrated into app; Japanese words now searchable even if not in dictionary form.
27th: πSupport for websites that use iFrames.
25th: πPersistent storage of user preferences.
23rd: πΌSide-drawer menu removed.
20th: πΌSide-drawer menu added.
08th: π¨βπ¬Feasibility of supporting PDFs affirmed.
05th: πDictionary showing as popup.
30th: π€Truncated redundant furigana in Japanese transcriptions.
20th: π€Hide/show transcriptions feature added.
18th: πRewrote most of the webpage-to-app communication code as I was unable to find the source of the crashes with the utility library I'd been using (XWebView).
13rd: π£Tap-to-speak added.
11st: π€Furigana (rather than Roman characters) added for Japanese transliterations.
05th: πSupport for defining words within links (and disabling links efficiently).
01st: πSupport for traditional Chinese characters.
28th: πTap-to-define feature added (but fullscreen - no popup!).
27th: πBasic support for tapping words added.
25th: πProgress bar for webpage loading.
22nd: πLanguage picker added.
19th: πSpecial support added for Thai (which hadn't worked).
18th: π€First transliteration of foreign-language words on webpage.
17th: π¨βπ¬First communication from webpage to the app environment.
11st: π¨βπ¬Browser updated from UIWebView to WKWebView.
07th: π¨βπ¬First communication from the app environment to the webpage.
07th: π€Chinese characters -> pinyin functionality working.
05th: πFirst commit, at 12:34
Thank you very much to Kim AhlstrΓΆm of jisho.org for permitting me to use his team's website as a fallback dictionary for Japanese. It's a resource of constant inspiration for me as I set my quality standards.
Thank you eternally to STUDIO BEATNIX for teaching me how to implement the "Open in LinguaBrowse" (Action Extension) feature when I'd all but given up on it. γSTUDIO BEATNIXγγ«ζ°Έι γ«ζθ¬γγΎγγγ’γ―γ·γ§γ³γ»γ¨γ―γΉγγ³γ·γ§γ³γγ€γγγγ¨γ諦γγιη«―γ«STUDIO BEATNIXγ―ζΉζ³γθ©³γγζγγ¦γγγΎγγγ
Thank you to my lovely Rachel for her constant motivation and support during this whole project.
Thank you to my family for putting up with my freeloading and incessant updates for these last two years whilst implementing this app.
Contact me β Jamie Birch β on antisocial media (Twitter or Reddit is best for a reply):
Or contact me using one of my legion of email addresses (note: JavaScript must be enabled to display the address for you to copy-and-paste into your email client; this is a protection against email-harvesting spam bots):