Eugene Belinski, Author at Software for Good https://softwareforgood.com/author/eugene/ Designing progress. Engineering change. Thu, 19 Apr 2018 17:50:04 +0000 en-US hourly 1 https://wordpress.org/?v=6.8 https://softwareforgood.com/wp-content/uploads/2023/06/cropped-favicon-32x32.png Eugene Belinski, Author at Software for Good https://softwareforgood.com/author/eugene/ 32 32 7 Steps Apple Could Take to Protect Privacy https://softwareforgood.com/7-steps-apple-could-take-to-protect-privacy/ Thu, 19 Apr 2018 17:50:04 +0000 https://softwareforgood.com/?p=3051 Over the past few years, Apple has enjoyed a stellar reputation for protecting the privacy of its users. iOS is the first major OS with built-in end-to-end encrypted messages and audio calls, and the Secure Enclave of iOS devices has been praised for its sophistication. In 2016, Apple successfully challenged an FBI demand to write […]

The post 7 Steps Apple Could Take to Protect Privacy appeared first on Software for Good.

]]>
Over the past few years, Apple has enjoyed a stellar reputation for protecting the privacy of its users. iOS is the first major OS with built-in end-to-end encrypted messages and audio calls, and the Secure Enclave of iOS devices has been praised for its sophistication. In 2016, Apple successfully challenged an FBI demand to write new software that would let the FBI hack a locked iPhone, and in September 2017, Apple launched a new privacy website that made it easier to understand how Apple’s privacy policy affects users.

But even so, Apple still falls short in some ways in protecting user privacy. Here are a few steps Apple could take to maximize the privacy and security of its customers.

Encrypt Mail iCloud data at rest

TL;DR: Apple should catch up with Gmail by encrypting your emails at rest.

According to this table, data for most iCloud products is encrypted at rest. This means that while it’s stored on Apple servers, it’s encrypted with a key held by Apple, and anyone who hacks into the servers without the key can’t decrypt the data. However, iCloud Mail does not enjoy this protection. Instead, emails are stored completely unencrypted.

Apple provides an explanation for this: “Consistent with standard industry practice, iCloud does not encrypt data stored on IMAP mail servers.” But this is only “standard practice” because IMAP email came around during a time with low interest in privacy. Today, there is increasing interest in highly secure email services like ProtonMail and TutaNota. These services not only encrypt mail at rest, but they have modern encryption implementations that means that even the companies themselves cannot decrypt mail content. At this point, even Google encrypts Gmail emails at rest now. Apple should catch up with the rest of its competitors and store all emails encrypted at rest.

Let users disable WiFi per app

A screenshot of the "Apps Using WLAN & Cellular" settings page on a Chinese iPhone.
With iPhones sold in China, users can disable Wifi (WLAN) for individual apps in the “Apps Using WLAN & Cellular” section.

TL;DR: Apple lets users in China disable WiFi per app. They should let the rest of the world do that too.

As a developer, I am amazed by how well Apple has devised iOS to prevent unwanted apps from running on users’ devices. When it comes to malware, iOS is leagues ahead of Windows and Android, and even macOS and Linux. If you keep your iOS up to date, malware virtually won’t happen. When it comes to deleting apps, it’s a similar situation.

Simply by tapping that grey X on an app icon, you can delete an app completely, along with its notifications, background network activity, HealthKit access, everything. If you try to uninstall an app on macOS, it could be leaving a lot behind: kernel extensions, cache files, and even malware.

But as long as you want to keep an app on iOS, you are surprisingly limited in how you can control the app. An app has the ability to make network connections any time it is open! (And any time in the background, if Background Mode is enabled!) This can be used to share your IP with anyone, making it possible to estimate your location even if you haven’t agreed to give the app your location. It can even be used to identify you personally in some cases.

One easy way to fix this is to allow users to disable WiFi access per app. It is already possible to disable cellular data access per app by going to Settings → Cellular → Cellular Data. If we could disable WiFi access as well, we would have the power to choose which apps are and are not allowed to connect to the internet.

Provide an Apple-run VPN for new users

TL;DR: VPNs are useful privacy tools if used wisely. Apple should make its own VPN.

The internet of 2018 is a different place than it was just a few years ago. Starting in March 2017, ISPs are allowed to sell your internet browsing history to anyone they want to. And on April 23, the repeal of Net Neutrality will go into effect, which means that ISPs can also slow down certain sites that they don’t like.

If all of this sounds horrifying to you, luckily there is a respite for iOS: VPN apps. With a paid VPN service provided through an iOS app, you can route all of your internet traffic through the company running the VPN service. You can browse the internet just as before, but your internet provider will not be able to figure out what sites you’re visiting. Going even further, the sites you visit won’t be able to estimate your location or identify you from your IP anymore.

There are a few downsides to VPNs, however. One is that you need to trust that the VPN company isn’t doing anything shady with your internet data. Although I use a VPN that I trust, many VPNs (especially free ones) are objectively terrible. Another problem with VPNs is that knowledge of their benefits is not widespread.

What can Apple do about this? I propose that they could create their own VPN service. When a user buys an iOS device, they could be presented with this service during setup. This could cause the biggest increase in adoption of VPNs ever. When Apple launched iMessage in 2011 with end-to-end encrypted messages, millions of users got instantly upgraded to a much more secure messaging platform than SMS, and they didn’t even know it. The same could happen with an Apple VPN service.

This wouldn’t be the ultimate silver bullet to solving all internet surveillance problems, and it would involve placing additional trust in Apple to protect browsing history, but it would be a great step in the right direction.

Implement an iOS-wide VPN kill switch

TL;DR: iOS should block network connectivity if a VPN fails, until the user unblocks it.

The third-party VPN feature of iOS works well, but what happens if a VPN fails? In this case, apps connecting to the internet can suddenly connect without the VPN, which could compromise your privacy. On other operating systems, VPN companies provide apps with kill switches, which kill all connections if the VPN connection fails, until the user disables the VPN manually. Due to the nature of iOS, it is up to Apple to implement such a feature. Apple should add a kill switch feature to the the VPN feature of iOS, which would stop all network traffic if a VPN connection fails.

Tracking blocker for apps

TL;DR: Apple should let users block ads and trackers in apps.

In 2015, Apple took the unprecedented step of allowing third-party ad and tracking blockers for Safari in iOS. Whereas there was nothing before, it suddenly became possible to block third-party trackers, ads, sharing widgets in Safari. But Apple introduced no similar feature for blocking trackers in native apps. In fact, in 2017, Apple cracked down on apps that tried to indirectly block third-party trackers in apps.

If Apple is serious about user privacy, it would take the next step in allowing apps that block ads and trackers in Safari to also block them system-wide.

Add a light indicator to the front-facing camera

An up-close photo of a MacBook Pro camera, with the green LED light turned on.
When the MacBook camera is in use, a green LED light turns on, alerting the user. This luxury is not available on iPhones.

TL;DR: Apple should add a light indicator so that users knows when iPhone cameras are being used.

iOS excels in camera privacy when compared to macOS or other desktop operating systems. If you deny an app permission to access your camera, the app is completely cut off. But what happens if you press allow?

Last year, researcher Felix Krause shows that apps can use your camera in more ways than you expect. He showed how an app, given permission to use your camera, can use it at any point while you have the app open, even if you don’t see the camera preview, and don’t think it’s being used. His proof of concept video went viral.

Can Apple do anything about this? On Macs, they already have. Any Mac equipped with a camera also comes with a bright green light, which shines when the camera is in use. In the infamous 2010 Pennsylvania school camera spying case, students first discovered that their school was spying on them in their bedrooms using the camera of their school MacBooks by noticing the green LED camera light come on at unexpected times.

Apple could do something like this on iOS, and it doesn’t even have to be a physical light. By simply displaying a green dot on the corner of the screen, iOS can make it clear exactly when a camera is being used by an app.

Allow MAC address spoofing on iOS

TL;DR: Apple can squash NSA surveillance by implementing MAC address spoofing on iOS.

Each internet-connected device has a MAC address (short for “media access control address”). It is the address that your iOS devices use to identify themselves to WiFi access points. Without it, it wouldn’t be possible for multiple devices to connect to a single network. But MAC addresses have a serious drawback — they can be used to spy on you and track your movement. According to Edward Snowden, the NSA is capable of tracking the movement of everyone in a city by tracking the MAC address of their mobile devices.

The only way to protect against this is by MAC address spoofing. The privacy conscious operating system Tails OS already has MAC address spoofing as a feature. When Tails boots up, it doesn’t use the default MAC address. Instead, it creates a new, random MAC address that is used until the computer is turned off. In practice, this works well — Tails OS devices can still automatically connect to WiFi networks that were previously configured. If Apple wants to eliminate iPhone MAC addresses as a tool for privacy violation, they should implement MAC address spoofing.

Apple has taken many steps to protect its users. These measures would make its privacy efforts even more effective, and make the iPhone much closer to a true privacy-conscious device.

The post 7 Steps Apple Could Take to Protect Privacy appeared first on Software for Good.

]]>
Be Loud https://softwareforgood.com/be-loud/ Thu, 22 Feb 2018 20:22:52 +0000 https://softwareforgood.com/?p=2988 Like many people, when I first heard about the school shooting in Florida last week at Marjory Stoneman Douglas High School, I didn’t spend much time thinking about it. It was another school shooting, the 18th in 2018, and already I could see what would happen: some outrage, thoughts and prayers, then we’ll forget about […]

The post Be Loud appeared first on Software for Good.

]]>
Like many people, when I first heard about the school shooting in Florida last week at Marjory Stoneman Douglas High School, I didn’t spend much time thinking about it. It was another school shooting, the 18th in 2018, and already I could see what would happen: some outrage, thoughts and prayers, then we’ll forget about it until the 19th school shooting of 2018.

But then something different happened. The students of the high school decided they didn’t want to stay quiet. They decided to be loud. Only four days after the attack, they began speaking out. They started a movement named Never Again, and began planning and holding rallies to fight the sad state of gun control in America. In less than a week, they transformed the narrative of the gun debate and made it seem possible that this could actually be the last major school shooting in America.

The post Be Loud appeared first on Software for Good.

]]>
iOS Ref: Making iOS Developers’ Lives Easier https://softwareforgood.com/ios-ref-quick-reference-site-ios-developers/ Thu, 25 Jan 2018 22:26:42 +0000 https://softwareforgood.com/?p=2948 As a mobile developer, I deal with a lot of different things when I make iOS apps, like Swift, Apple’s many mobile APIs, different device sizes, and so on. In the world of iOS, Apple’s documentation and resources dominate the development community. But a lot of the time, I found myself only needing basic bits […]

The post iOS Ref: Making iOS Developers’ Lives Easier appeared first on Software for Good.

]]>
As a mobile developer, I deal with a lot of different things when I make iOS apps, like Swift, Apple’s many mobile APIs, different device sizes, and so on. In the world of iOS, Apple’s documentation and resources dominate the development community. But a lot of the time, I found myself only needing basic bits of information that are hard to dig up, such as iOS screen sizes, Swift closure syntax, and iOS versions by device.

Aside from Apple’s resources, there are a few convenient websites that offer this basic information. But many of these websites only offer one bit of information at a time. There’s a one-page website for explaining Swift closures. Another one-page website for iOS device resolutions. There’s even a website just for converting a hex code to a UIColor, made by some weird guy (cough me).

With so many websites with unique names, it’s hard to remember which one is which. A few weeks ago, I got tired of all this, and decided to do something about it. I ended up creating iOS Ref, a quick reference website for iOS and Swift developers. It has the following:

Convenient device resolution tables:

A beautiful and concise Swift 4 cheatsheet:

iOS compatibility tables:

A hex code to UIColor converter:

Swift 4 guides to things like closures:

When I started iOS Ref, my goal was not to provide information that isn’t available anywhere else, it was to make the most important iOS information, tools, and links accessible as quickly and as friction-free as possible. So far, I’ve received a lot of positive feedback and some really great suggestions! I’m always looking for things to add, and clutter to remove from iOS Ref, so if you have any suggestions, just let me know.

The post iOS Ref: Making iOS Developers’ Lives Easier appeared first on Software for Good.

]]>
Don’t Trust Shortcuts https://softwareforgood.com/dont-trust-shortcuts/ Mon, 27 Nov 2017 21:45:56 +0000 https://softwareforgood.com/?p=2868 A couple days ago, I was really excited to finish a new feature for a pro bono iOS app I was working on, but there was just one piece missing. It was a piece I was dreading, so I left it off until the end. I knew there was a “proper” way of implementing it, […]

The post Don’t Trust Shortcuts appeared first on Software for Good.

]]>
A couple days ago, I was really excited to finish a new feature for a pro bono iOS app I was working on, but there was just one piece missing. It was a piece I was dreading, so I left it off until the end. I knew there was a “proper” way of implementing it, but it would’ve taken more time. So, I just took a shortcut and went another way.

I told myself, “In theory, this will work!”
Then, I sent it out.

It didn’t work.

I had to rewrite it from scratch. It didn’t take much longer than the first try, and I learned some new things about iOS networking. But that shortcut ended up costing more time than it saved. I should’ve known not to trust it. And, now, I do.

The post Don’t Trust Shortcuts appeared first on Software for Good.

]]>
Don’t Eat Your Peas https://softwareforgood.com/dont-eat-your-peas/ Mon, 04 Sep 2017 20:23:31 +0000 https://softwareforgood.com/?p=2792 I don’t know about you, but I hate peas. They’re high in fiber, protein, and annoyance. I’ve decided to end the seed-pod tyranny: I simply won’t have peas any more. This week’s theme: Don’t Eat Your Peas. Take some time to reflect on the things you’re doing that take up a lot of your time, […]

The post Don’t Eat Your Peas appeared first on Software for Good.

]]>
I don’t know about you, but I hate peas. They’re high in fiber, protein, and annoyance. I’ve decided to end the seed-pod tyranny: I simply won’t have peas any more. This week’s theme: Don’t Eat Your Peas. Take some time to reflect on the things you’re doing that take up a lot of your time, but don’t provide enough benefit (or enjoyment) to justify the effort.

Some examples:

• Eating peas
• Trying out weird and expensive diets
• Commenting your code *

 

*Just kidding

The post Don’t Eat Your Peas appeared first on Software for Good.

]]>
Implementing Home Screen Quick Actions in Swift https://softwareforgood.com/implementing-home-screen-quick-actions-in-swift/ Fri, 23 Jun 2017 19:00:35 +0000 https://softwareforgood.com/?p=2684 Ahead of Twin Cities Pride 2017, we decided to make some changes to our accompanying iOS app that would take advantage of new iPhone features. The Pride app serves as a guide for the festival and parade, and is written in Swift 3.0. One newly implemented feature is known as Home Screen Quick Actions. This feature gives […]

The post Implementing Home Screen Quick Actions in Swift appeared first on Software for Good.

]]>
Ahead of Twin Cities Pride 2017, we decided to make some changes to our accompanying iOS app that would take advantage of new iPhone features. The Pride app serves as a guide for the festival and parade, and is written in Swift 3.0. One newly implemented feature is known as Home Screen Quick Actions. This feature gives users with an iPhone 6s or 7 the ability to “3D touch” an app icon on their home screen to use app shortcuts. We used this feature to show users shortcuts to the parade, events, and map pages of the app.

A screenshot of an iPhone home screen, displaying the icon of the pride festival app, with three home screen quick actions directly above it. Everything else is blurred.
Home screen quick actions in the Twin Cities Pride Festival iOS app

Static Versus Dynamic Actions

There are two types of quick actions: static and dynamic. Static actions for an app are defined in a project’s Info.list file, and don’t change. Dynamic actions, meanwhile, are defined at runtime and can change (based on user actions, for example). Although only static actions were needed for our purposes, we decided to implement our actions as dynamic to avoid the “stringly” nature of defining them in the Info.list file. This also allows us to implement dynamic, changing quick actions in the future.

ShortcutManager

We created a Swift struct named ShortcutManager with just two methods:

func shortcutItems() -> [UIApplicationShortcutItem]
func handle(shortcutItem: UIApplicationShortcutItem) -> Bool

The first method provides an array of our three UIApplicationShortcutItem objects, and the second one is called from the app delegate when a user taps on a shortcut item. One UIApplicationShortcutItem corresponds to a quick action. The second method changes tabs based on the identifier of the shortcut item.

Because our app still supports iOS 8.0 and home screen quick actions are exclusive to iOS 9 and above, the ShortcutManager is declared to be available for iOS 9.0 and above only, by adding @available(iOS 9.0, *) on a line above the class declaration.

An enum is used for the shortcut identifiers:

enum ShortcutIdentifier: String {
  case openMap
  case openEvents
  case openParade
}

And a UIApplicationShortcutItem is defined in shortcutItems() as such:

UIApplicationShortcutItem(type: ShortcutIdentifier.openMap.rawValue,
                          localizedTitle: "Map",
                          localizedSubtitle: nil,
                          icon: UIApplicationShortcutIcon(templateImageName: "map_icon"),
                          userInfo: nil)

In the app delegate, the shortcut items are set like this:

if #available(iOS 9.0, *) {
  application.shortcutItems = ShortcutManager.sharedInstance.shortcutItems()
}

Similar to @available(iOS 9.0, *) earlier, using #available(iOS 9.0, *) causes the code in the conditional block to run only if the device has iOS 9.0 or above.

Handling shortcut item selections happens like this:

@available(iOS 9.0, *)
func application(_ application: UIApplication,
                 performActionFor shortcutItem: UIApplicationShortcutItem,
                 completionHandler: @escaping (Bool) -> Void) {
  completionHandler(ShortcutManager.sharedInstance.handle(shortcutItem: shortcutItem))
}

With quick actions defined dynamically, we can display a quick action to access the next upcoming event or provide directions to the festival based on user location in future versions of the app.

Twin Cities Pride 2017 is available for iOS and can be downloaded here.

The post Implementing Home Screen Quick Actions in Swift appeared first on Software for Good.

]]>
Take a Deep Breath https://softwareforgood.com/take-deep-breath/ Wed, 07 Jun 2017 19:39:31 +0000 https://softwareforgood.com/?p=2671 If you’re feeling overwhelmed or you have a problem that feels too big to solve, pause for a moment and take a deep breath. It won’t melt all stress away at once, but it will still help you confront your problems with clarity. Scientific studies have found that breathing exercises helps in dealing with stress, […]

The post Take a Deep Breath appeared first on Software for Good.

]]>
If you’re feeling overwhelmed or you have a problem that feels too big to solve, pause for a moment and take a deep breath. It won’t melt all stress away at once, but it will still help you confront your problems with clarity. Scientific studies have found that breathing exercises helps in dealing with stress, anxiety, and even some diseases. So this week, take a deep breath.

 

The post Take a Deep Breath appeared first on Software for Good.

]]>
Learn Something Totally New https://softwareforgood.com/learn-something-totally-new/ Tue, 29 Nov 2016 21:31:10 +0000 https://softwareforgood.com/?p=2517 As a software developer, there’s still many things I don’t know about computers. For one thing, I don’t know much about the hardware that I run my code on. To be honest, it’s still totally new to me. I finally decided to do something about it, so I bought a Raspberry Pi and Arduino board […]

The post Learn Something Totally New appeared first on Software for Good.

]]>
As a software developer, there’s still many things I don’t know about computers. For one thing, I don’t know much about the hardware that I run my code on. To be honest, it’s still totally new to me. I finally decided to do something about it, so I bought a Raspberry Pi and Arduino board and started experimenting. This week, learn something totally new.

The post Learn Something Totally New appeared first on Software for Good.

]]>
Go Out And Get Some Nature! https://softwareforgood.com/go-get-nature/ Mon, 22 Aug 2016 19:47:12 +0000 https://softwareforgood.com/?p=2417 With summer quickly nearing its end, you may be thinking to yourself, how can I relax, make the most of my free time, and avoid sitting all day? Well we’ve got just the thing: NATURE! Scientifically proven to reduce stress, cortisol levels, and blood pressure, nature is just what you’ve been looking for! For only […]

The post Go Out And Get Some Nature! appeared first on Software for Good.

]]>
With summer quickly nearing its end, you may be thinking to yourself, how can I relax, make the most of my free time, and avoid sitting all day?

Well we’ve got just the thing: NATURE!

Scientifically proven to reduce stress, cortisol levels, and blood pressure, nature is just what you’ve been looking for! For only three simple payments of free time, enthusiasm, and a map, you too can experience nature.

BUT WAIT, THERE’S MORE! Act now, and we’ll throw in an extra dose of synthesized Vitamin D.

Available wherever parks have trees.

The post Go Out And Get Some Nature! appeared first on Software for Good.

]]>
Secrets https://softwareforgood.com/secrets/ Mon, 27 Jun 2016 20:53:20 +0000 https://softwareforgood.com/?p=2368 In the book Zero to One, a secret is described as an answer to the question, “what valuable idea is nobody working on?” Do you have a secret like that? It could be something as simple as a better way of implementing a class, or a completely different way of seeing the world. This week, […]

The post Secrets appeared first on Software for Good.

]]>
In the book Zero to One, a secret is described as an answer to the question, “what valuable idea is nobody working on?” Do you have a secret like that? It could be something as simple as a better way of implementing a class, or a completely different way of seeing the world. This week, consider sharing your secret with others, or building it yourself.

The post Secrets appeared first on Software for Good.

]]>