Intuitive Explanations of Some Math Expressions

Some math expressions look strange until you connect them to something real.
Here are a few that make more sense with the right picture in mind.

0/0 (Zero divided by zero)

Zero divided by zero is not zero, but undefined.
Let's think of a law enforcement agent working with an informant, and receiving regular tips:

  • Week 1: The agent gets 4 tips from the informant, and decides to raid all 4 places. Finds something in 2 of them. Success rate of the informant is: 2/4 = 0.5.
  • Week 2: The agent gets 3 tips, and again decides to raid all, but finds nothing. Success rate of the informant can be said to be 0/3 = 0.
  • Week 3: The agent gets 5 tips, but this time decides to raid none of them. Success rate: 0/0.

This last case is different. No raids mean no chance to measure success or failure.
We can't say the informant was bad (0 success), and we can't say good either.
That's why 0/0 is undefined, not zero.

0! (Zero factorial)

Zero factorial is not 0, but 1.
The factorial is a fundamental concept in combinatorics, the study of counting.
The number of ways to arrange n distinct objects is given by n!.

For example:

There are 3! = 6 ways to arrange three different books on a shelf.
There are 2! = 2 ways to arrange two different books.
There is 1! = 1 way to arrange one book.

Now, how many ways are there to arrange zero books?

If you have a set with zero objects (an empty set), there is only one way to arrange them: by doing nothing.
The "arrangement" is the empty shelf arrangement itself.

So, the number of ways to arrange zero objects is 1.
Therefore, 0! = 1. This interpretation is the one most commonly used in mathematics to define 0!.

i (Unit imaginary number)

Unit imaginary number, the square root of -1, corresponds to 90 degrees in 2D vector space.
But it isn't so imaginary if you think of it as a rotation.
First consider multiplying a number by -1. This changes its direction by 180 degrees on the number line.
Multiplying a number by i, corresponds to rotating it 90 degrees.
Doing this again results in a 180 degrees rotation.
That's the same as flipping to the negative side: i × i = -1.
This is the geometric reason why i = √-1.

0⁰ (Zero to the power of zero)

At first glance, 0 raised to the power of 0 looks like nonsense.
One may be tempted to say it is 0.
Particularly in mathematical analysis, it is often considered an indeterminate form.
But in combinatorics and algebra it is actually just 1.

This one may not sound as intuitive as the ones above, but let's start with a foundational combinatorial principle:
If we have a set A with k elements and a set B with n elements, the number of possible functions (or mappings) from set A to set B is given by nᵏ.

When we say "number of possible functions" we mean: how many different ways can we assign each element of one set (the domain) to elements of another set (the codomain).

For example:

  • Domain = {Alice, Bob} (2 people).
  • Codomain = {Coffee, Tea, Juice} (3 drinks).
  • Alice can pick any of the 3 drinks.
  • Bob can also pick any of the 3 drinks, no matter what Alice chose.
  • That gives 3² = 9 different "assignment rules".

Each of those 9 is a distinct function (one might map both names to Coffee, another maps Alice to Tea, Bob to Juice, etc.).
But at the end there 9 different functions can exist for this mapping. Let's list all those functions actually:

  • Function 1: Alice → Coffee, Bob → Coffee
  • Function 2: Alice → Coffee, Bob → Tea
  • Function 3: Alice → Coffee, Bob → Juice
  • Function 4: Alice → Tea, Bob → Coffee
  • Function 5: Alice → Tea, Bob → Tea
  • Function 6: Alice → Tea, Bob → Juice
  • Function 7: Alice → Juice, Bob → Coffee
  • Function 8: Alice → Juice, Bob → Tea
  • Function 9: Alice → Juice, Bob → Juice

Each of these functions would take a name as input and return a drink as output.
And as you can see there 3² = 9 distinct functions. No more, no less.

Now let's apply this to the case of 0⁰.
We need to consider the number of functions from a set of size 0 to a set of size 0.

  • Domain: is a set with 0 elements, which is the empty set, denoted by .
  • Codomain: is also the empty set, .
  • So, we are trying to find the number of functions f: ∅ → ∅.
    A function is a rule that assigns each element of the domain to exactly one element of the codomain.
    Let's follow this rule for our two empty sets:

    1. "...assigns each element of the domain..."
      • The domain is the empty set. It has no elements.
      • This condition is satisfied because there are no elements to assign. The rule "for each element" is trivially true because there are no elements to check.
    2. "...to exactly one element of the codomain."
      • This part of the rule is also satisfied, again because there are no elements to assign.

So, the "rule" of the function holds true. The assignment is just a "do nothing" assignment. There is exactly one way to do nothing.
The "one way to do nothing" is the empty function.
Since there is only one such function (the empty function itself), the number of ways to map elements from a set of 0 elements to a set of 0 elements is 1. Therefore, 0⁰ = 1.

Negative exponent

Exponents don't stop at whole numbers. Once you see the pattern, negatives and fractions fit naturally.

a⁻¹ just means "divide by a".
Because a¹ × a⁻¹ = a⁽¹⁻¹⁾ = a⁰ = 1.
Example: 2⁻¹ = 1/2, 10⁻¹ = 1/10.
In general: a⁻ⁿ = 1 / (aⁿ).
This comes directly from the rule aᵐ × aⁿ = a⁽ᵐ ⁺ ⁿ⁾.
If you want exponents to add consistently, negative exponents must represent division.

Fractional exponent

a¹ᐟ² means "a number that when multiplied by itself gives a".
Because a¹ᐟ² × a¹ᐟ² = a⁽¹ᐟ² ⁺ ¹ᐟ²⁾ = a¹ = a.
That's why a¹ᐟ² is the square root.

Similarly, a¹ᐟ³ means "a number that when multiplied by itself three times gives a".
Because a¹ᐟ³ × a¹ᐟ³ × a¹ᐟ³ = a⁽¹ᐟ³ ⁺ ¹ᐟ³ ⁺ ¹ᐟ³⁾ = a¹ = a.
That's why a¹ᐟ³ is the cube root.

More generally:
a¹ᐟⁿ is the n-th root of a.
aᵐᐟⁿ = (a¹ᐟⁿ)ᵐ.

Example: 8²ᐟ³ = (8¹ᐟ³)² = 2² = 4.

Knowledge Bottlenecks: The Hidden Barrier Behind Simple Tasks

Some problems look pretty simple from the outside.
But whether something is "trivial" or a "nightmare" depends entirely on what you know.
Experience and technical knowledge act like a filter. With them, you see where pitfalls are, what steps to take, and which solutions will not work. And without them, you can waste hours chasing dead ends or assume the task itself is impossible.
This is the gap between "looks easy" and "actually easy."

An example case: Playing a video file on a smart TV via a USB stick

Suppose someone wants to play a large video file stored on their Mac through a smart TV using a USB stick.
On the surface: copy and paste.
In practice: a series of hidden requirements that only experience reveals.

Knowledge Bottlenecks

  • TV requirements: Most TVs accept only FAT32 or NTFS formatted drives. If the user does not know anything about file systems, they would be lost immediately.
  • macOS FAT32 support: macOS can read and write FAT32, but FAT32 has a hard limit of 4 GB per file. A 6 GB video will not copy.
  • macOS NTFS limitation: macOS can read NTFS drives but cannot write to them. Without this knowledge, the user may think the USB stick is broken.
  • Third-party NTFS drivers: Writing to NTFS requires external software. Most rely on kernel extensions that need explicit approval in System Settings.
  • Security approval: Approving a kernel extension cannot be done casually. The user must reboot into recovery mode, launch Startup Security Utility, and reduce the security policy before the driver works.
  • Different recovery mode paths: On Intel Macs, recovery mode is entered by holding Command + R at startup. On Apple silicon Macs, you must press and hold the power button until "Loading startup options" appears. Not knowing the difference makes instructions useless.
  • macOS beta restrictions: On beta releases, the security policy toggle may not function at all. No workaround exists without rolling back the system. If user is on a beta version, they are again hitting the wall.

Each step is a gate. Without the knowledge to pass through, the user is blocked, even though the original request sounded like "just copying a file."

Why It Matters

This gap exists everywhere. Engineering problems, design decisions, scientific experiments, even routine office tasks. Outsiders see the surface and underestimate complexity. Insiders know the hidden constraints and dependencies.

Knowledge does not simply make tasks easier. It is the difference between being stuck at an invisible wall and walking straight through it while dealing with problems.

So, simplicity is not always the absence of complexity, but the mastery of it.

“What happens on your iPhone, stays on your iPhone” really?

Even though Apple occasionally comes up with vulnerabilities that cause data leaks, it is generally known for attaching great importance to privacy policies in its products.
Especially Sign in with Apple feature announced with iOS 13, is one of the latest examples of this.
However, when it comes to data security and privacy, not everything may go as Apple intended.
Let's touch upon what a malicious app developer or various SDKs innocently added to the apps can do without any permission from the user or abuse various permissions granted:

What happens on your iPhone, stays on your iPhone.
Photo credit: Chris Velazco

Paste Board

Paste Board is the unit where copy-paste operations are managed on iOS.
All apps can read copied text or images from here without any permission.
It does not matter whether the app is actively on the screen or in the background, it just needs to be running.
An explicit action such as "paste" command by the user is also not required.
So, text or images copied by the users are vulnerable to abuse.

In addition, apps can write their own text or images to the Paste Board, without user's consent.
Thus, things that may put the user in a difficult situation can be placed to the Paste Board, as if the user copied them.

For technical details, please see Apple's docs.

Update: On WWDC 2020, Apple announced that there will be a notification banner, if an app reads data from Paste Board on iOS 14+.

Update: On WWDC 2022, Apple announced that there will be permission dialog, if an app attempts to read data from Paste Board on iOS 16+.

Photos

Apps that are granted photos access, along with all the photos, can also access the data embedded in these photos such as location and time.
Hence, regardless of location permission, apps can obtain location info both retroactively and continuously as the user keeps taking photos.

With iOS 11, Apple had announced a solution that could partially work.
A photo selection UI component called UIImagePickerController, designed to give only the selected photos to the app once, instead of granting access to all photos forever.
However, since Apple does not force the use of this component, it is not preferred by the app developers and the apps often require unnecessary full photos access.

For technical details, please see this issue on GitHub.

Update: On WWDC 2020, Apple announced that there will be a Limited Photos Library Access mode (PHAuthorizationStatusLimited) on iOS 14+.

Microphone

Apps that are granted microphone access do not have to show any warning during voice recording.
If the app is recording audio while in the background or making a voice call, iOS automatically changes the color of the status bar and notifies the user visually.
However, if the app is recording audio while actively on the screen, it may not always be possible to notice this.
For example, an app like WhatsApp granted microphone access for voice calls, may be recording audio, not only during the voice calls, but also while text messaging or even on its settings screen.

Update: On WWDC 2020 keynote, Apple announced that there will always be an indicator dot in the status bar, while an app is recording audio on iOS 14+.

Camera

Procedure of video recording with the camera is similar to the audio recording with the microphone.
Apps with camera permission can secretly record video while actively on the screen without any indicators.

Update: On WWDC 2020 keynote, Apple announced that there will always be an indicator dot in the status bar, while an app is recording video on iOS 14+.

Bluetooth

Until iOS 13, iOS apps that are actively running could scan the surrounding Bluetooth beacons without any permission.
Thus, with the beacons placed in points with high pedestrian traffic such as shopping malls, stadiums and public transportation, it was possible to track how much time a user spends at an exact point, with exact day and time info.
With iOS 13, Apple restricted this feature, and now requiring explicit user permission to use Bluetooth.

For technical details, please see Apple's docs.

WiFi SSID and Local Network

WiFi SSID the device is connected to can be read by all apps without any permission.
This may give a clue about the user's location, especially if it is a publicly available network.
Also, all the devices connected to the same local network can be scanned without any permission.

Apple first attempted to fix this flaw with an entitlement requirement on iOS 12, then further tightened the requirements with iOS 13.
As of iOS 13, apps must have location permission or be capable of network settings, to access SSID information.

For technical details, please see Apple's docs.

Update: On WWDC 2020, Apple announced that there will be a new permission for local network access on iOS 14+.

URL Scheme

URL scheme, in simple terms, is the first part of a URL and specifies its type.
The best known examples are such as http://, ftp://, mailto://.

All apps can define their own URL schemes like twitter://, instagram:// youtube://, nflx://.
If a URL starts with a URL scheme defined by any app, iOS will open the URL with that associated app.
This feature is very important for cross-app transitions, deep linking and 3rd party login features.

However, all apps can discover which other apps are installed on a user's device by querying if some specific URL schemes are defined or not.

Thus, fine targeted ads becomes possible via advanced segmentations such as 'Netflix and Amazon Prime Video apps are installed on this user's device, but not there are no social media apps'.

Although Apple has introduced some restrictions for querying URL schemes with iOS 9, this method is still technically possible as of iOS 13.

Another important point is that there are no restrictions on which app can define which URL schemes on iOS.
For this reason, a completely irrelevant app can manage to open all the URLs that start with youtube:// just by defining youtube:// URL scheme.
This may also allow various phishing attacks.

For technical details, please see Apple's docs.

Update: On WWDC 2021, Apple announced that URL schemes to be queried will be limited to 50 on iOS 15+.

In-App Browser

In some apps, the links that are clicked by user can be opened with an interface component called WKWebView (or older UIWebView) within the app, without switching to Safari app.
All browsing activity inside this in-app browser can be read by the app.
It can be associated with previous or future browsing activities and may be used for profile linking.

Apple introduced the component called 'SFSafariViewController' which could be the solution to this problem with iOS 9.
The browsing activity under SFSafariViewController cannot be read by the apps.
But, since Apple does not force the use of this component, there are still some apps that use 'WKWebView'.

For technical details, please see Apple's docs.

Fingerprinting

Although it is not only specific to iOS devices, it may be possible to detect and track the user by collecting all kinds of permanent or dynamic info that can be obtained from the device.
This includes but not limited to; selected language and region settings, time zone, device model, storage capacity, percentage of free storage, battery percentage, whether the charging cable is connected or not, operator information, device name, Apple Watch pairing status, connection type, IP address and access permission states.

Device Name

The device name is the name of the device displayed in places such as iTunes, AirDrop and Find My iPhone.
Generally, it is like "John's iPhone" or "Jane's iPad", and it can give clues about the user's name and gender.
It can be read by all apps running on the device without requiring any permission.
It can be set from Settings > General > About screen of iOS.

Update: On WWDC 2022, Apple announced that User Assigned Device Name entitlement will be required to access device name on iOS 16+.

Operator

The cellular service operator name and code can be read by all apps without permission.
This can give a clue about the user's whereabouts.
In addition, when the user visits another country and changes SIM card, this can give clues about which country the user is visiting, even if there is no internet connection or location permission.

For technical details, please see Apple's docs.

Update: On WWDC 2022, Apple announced that carrier name is deprecated and will always return "--" on iOS 16+.

NSNull

NSNull is a singleton instance representing null values on iOS.
However, the NSNull singleton remains in system-wide memory, not application-specific.
Therefore, if the pointer value is printed and examined from different applications, it can be observed that it is exactly the same address.
This value will change only when the device is rebooted, otherwise it will stay the same.

Exactly the same memory address values such as 0x1ebe1bc30 can allow user detection and tracking even among the apps that do not belong to the same developer.

For technical details, please see Apple's docs.

IDFA

Identifier for Advertisers (IDFA) is Apple's official way for app developers to track users and serve advertisements.
Unfortunately, as of iOS 13 it is still enabled by default, and can be opted-out using Limit Ad Tracking switch under Settings > Privacy > Advertising screen of iOS.

Until iOS 10, IDFA value was accessible even for opted-out users, and app developers were just asked to respect users' preference about it, without further limitation.
But with iOS 10, IDFA value was replaced with a hardcoded 00000000-0000-0000-0000-000000000000 value for all opted-out users.

For technical details, please see Apple's docs.

Update: On WWDC 2020, Apple announced that there will be a new permission for tracking users or accessing their device's IDFA on iOS 14.5+.

Keychain - iCloud - GameCenter

Encrypted data store Keychain, cloud data service iCloud and online gaming service Game Center, may allow developers to identify the user even after the app is deleted and reinstalled.

In some apps that require login, this can be a convenience for the user.
But it can also be used for user detection and tracking before the user logs in, or even logs in with a different account.

While the data stored in the local Keychain is cleared only when the device is reset, iCloud and Game Center data are accessible unless the user logs out from iOS Settings.

Summary

These are some of the examples of what a malicious app developer or various SDKs in the apps can do.
Apple regularly removes some apps from the App Store, and even terminates Apple Developer Program memberships for violating its review guidelines.
But, usually this happens only if the issue is reported by the users or detected by review team by chance.
So, it is always better to know the systems we use everyday, and to err on the side of caution.

“iPhone’unuzda olan iPhone’unuzda kalır” mı?

For the English version of this post: https://erkanyildiz.me/blog/what-happens-on-your-iphone-stays-on-your-iphone-really/

Apple, her ne kadar ara sıra veri sızıntılarına neden olan açıklarla gündeme gelse de, ürünlerinde genel olarak gizlilik politikalarına oldukça önem veren bir firma.
Özellikle iOS 13 ile duyurduğu Sign in with Apple özelliği de bunun en son örneklerinden biri.
Fakat, yine de veri güvenliği ve gizlilik söz konusu olunca her şey Apple'ın istediği gibi olmayabiliyor.
Kötü niyetli geliştiricilerin ya da uygulamalara masumca eklenen çeşitli SDK'lerin kullanıcıdan izin almadan neler yapabileceklerine ya da aldıkları çeşitli izinleri nasıl suistimal edebileceklerine değinelim:

What happens on your iPhone, stays on your iPhone.
Fotoğraf: Chris Velazco

Paste Board

Paste Board, iOS'te kopyala-yapıştır işlemlerinin yönetildiği birimdir.
Tüm uygulamalar, kopyalanan metin ya da görselleri herhangi bir izne tâbi olmadan buradan okuyabilirler.
Uygulamanın aktif olarak ekranda ya da arkaplanda oluşu farketmez, sadece çalışıyor olması yeterlidir.
"Yapıştır" komutu gibi bir kullanıcı aksiyonu da gerekmez.
Bu nedenle, kullanıcıların kopyaladığı metin ya da görseller uygulama geliştiricilerin istismarına açık durumdadır.

Ayrıca, uygulamalar kendi istedikleri metin ve görselleri kullanıcıdan habersiz şekilde Paste Board'a yazabilirler.
Böylece kullanıcıyı zor durumda bırakacak şeyler, kullanıcı kopyalamış gibi Paste Board'a yerleştirilebilir.

Kullanıcı adı, parola, private link gibi sıkça kopyala-yapıştır yapılan verilerin başka uygulamalar tarafından okunma olasılığını en aza indirmek için, yapıştırma işleminden sonra önemsiz metin ya da görseller gibi başka şeyler kopyalamak, ya da Paste Board temizliği yapabilen uygulamalardan birini kullanmak önerilebilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2020 etkinliğinde, iOS 14'te herhangi bir uygulamanın Paste Board'dan veri okuması durumunda bir küçük bildirim görüntüleneceğini duyurdu.

Güncelleme: Apple WWDC 2022 etkinliğinde, iOS 16'da herhangi bir uygulamanın Paste Board'dan veri okumaya çalışması durumunda bir izin diyaloğunun görüntüleneceğini duyurdu.

Fotoğraf Erişim İzni

Fotoğraf erişimi için izin verilen uygulamalar, tüm fotoğraflarla birlikte, konum ve zaman gibi fotoğraflara gömülü bazı verilere de erişebilirler.
Böylece konum izninden bağımsız olarak, hem geçmişe dönük, hem de kullanıcı fotoğraf çektikçe anlık olarak konum bilgisini elde edebilirler.

Apple, bu sorunu tamamen çözmese de kısmen işe yarayabilecek bir çözümü iOS 11 ile duyurmuştu.
Fotoğraf seçmeye yarayan UIImagePickerController adlı arayüz bileşeni, tüm fotograflara erişim hakkı yerine sadece o an için seçilen fotoğrafları uygulamaya verecek şekilde çalışıyor.
Fakat Apple bu bileşenin kullanımını zorunlu tutmadığı için, geliştiriciler tarafından pek tercih edilmiyor ve uygulamalar genelde gereksiz yere tam fotoğraf erişimi talebinde bulunuyor.

Teknik ayrıntılar için bu GitHub issue sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2020 etkinliğinde, iOS 14'te Sınırlı Fotoğraf Kütüphanesi Erişimi (PHAuthorizationStatusLimited) adında yeni bir özellik olacağını duyurdu.

Mikrofon Erişim İzni

Mikrofon erişimi için izin verilen uygulamalar ses kaydı esnasında herhangi bir uyarı göstermek zorunda değildirler.
Eğer uygulama sesli arama gerçekleştiriyorsa, ya da arkaplanda iken ses kaydı yapıyorsa, iOS otomatik olarak status bar'ın rengini değiştirerek bunu kullanıcıya görsel olarak bildiriyor.
Fakat uygulama aktif olarak ekrandayken ses kaydı yapıyorsa, bunu anlamak her zaman mümkün olmayabiliyor.
Yani, sesli arama için mikrofon izni verilen WhatsApp gibi uygulamalar, yalnızca sesli arama esnasında değil, yazılı şekilde mesajlaşırken ya da ayarlar ekranındayken bile ses kaydı yapıyor olabilirler.

Güncelleme: Apple, 22 Haziran 2020 tarihinde gerçekleştirdiği WWDC 2020 etkinliğinde, iOS 14'te herhangi bir uygulamanın ses kaydı yapıyor olması durumunda status bar'da uyarı amaçlı bir nokta belireceğini duyurdu.

Kamera Erişim İzni

Kamera ile görüntü kaydının işleyişi mikrofon ile ses kaydına benzer şekildedir.
Kamera iznine sahip uygulamalar, aktif olarak ekrandayken herhangi bir belirti vermeden gizlice görüntü kaydı yapabilirler.

Güncelleme: Apple, 22 Haziran 2020 tarihinde gerçekleştirdiği WWDC 2020 etkinliğinde, iOS 14'te herhangi bir uygulamanın kamera kaydı yapıyor olması durumunda status bar'da uyarı amaçlı bir nokta belireceğini duyurdu.

Bluetooth

iOS 13'e kadar, aktif olarak çalışmakta olan iOS uygulamaları etrafta bulunan Bluetooth beacon'ları herhangi bir izne tâbi olmadan tarayabiliryorlardı.
Böylece, anlaşmalı mağazalar, AVM'ler, istasyonlar ve stadyumlar gibi yoğun insan trafiği yaşanan yerlere yerleştirilen beacon'lar ile kullanıcının hangi gün ve saatte, tam olarak hangi noktada ne kadar vakit harcadığı aytıntılı olarak takip edilebiliyordu.
Apple, iOS 13 ile birlikte bu duruma kısıtlama getirerek Bluetooth kullanımı için kullanıcı iznini şart koşmaya başladı.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

WiFi SSID ve Yerel Ağ

Cihazın bağlı olduğu WiFi'ın SSID'si tüm uygulamalar tarafından herhangi bir izne tâbi olmadan okunabilir.
Bu da kullanıcının konumu hakkında ipucu verebilir. Ayrıca, aynı yerel ağda bulunan tüm cihazlar da herhangi bir izne tâbi olmadan taranabilir.

Apple, ilk olarak iOS 12 ile bu duruma kısıtlama getirdi, daha sonra iOS 13 ile birlikte şartları daha da sıkılaştırdı.
iOS 13 itibariyle uygulamalar SSID bilgisine erişebilmek için konum iznine sahip olmak ya da ağ ayarları yapabilme yetkisine sahip olmak zorundalar.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2020 etkinliğinde, iOS 14'te yerel ağ erişimi için yeni bir izin türü olacağını duyurdu.

URL Scheme

URL scheme, basit şekilde ifade edilecek olursa, bir URL'in en başında bulunan ve türünü belirten kısımdır.
En bilinen örnekleri http:// , ftp://, mailto:// gibileridir.

Tüm uygulamalar twitter://, instagram:// youtube://, nflx:// gibi kendi URL scheme'lerini tanımlayabilirler.
iOS'te açılmak istenen bir URL, herhangi bir uygulama tarafından tanımlanmış bir URL scheme ile başlıyorsa, söz konusu ilişkili uygulama ile açılır.
Bu özellik, uygulamalar arası geçişler, deep linking ve 3rd party login işlemleri için oldukça önemlidir.

Fakat tüm uygulamalar istedikleri URL scheme'lerin sistemde tanımlanmış olup olmadığını sorgulayarak, kullanıcının cihazında hangi uygulamaların yüklü olup olmadığını öğrenebilirler.

Böylece, bu kullanıcıda hem Netflix hem de Amazon Prime Video uygulamaları yüklü, fakat herhangi bir sosyal medya uygulaması kullanmıyor gibi sınıflandırmalar ve dolayısıyla hedefli reklamlar mümkün hale gelebilir.

Apple, iOS 9 ile birlikte sorgulanabilecek URL scheme'ler için bazı kısıtlamalar getirdiyse de, bu yöntem teknik olarak hala mümkün.

Bir başka önemli nokta da, iOS'te hangi uygulamanın hangi URL scheme'leri tanımlayabileceğine dair hiçbir kısıtlama olmaması.
Bu nedenle tamamen alâkasız bir uygulama, örneğin youtube:// URL scheme'ini tanımlayıp, youtube:// ile baslayan tüm URL'leri kendisi açmayı başarabilir.
Bu durum, kullanıcın dalgınlığıyla birlikte çeşitli phishing saldırılarına da imkan sağlayabilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2021 etkinliğinde, iOS 15'te sorgulanabilecek URL scheme'lerin 50 ile sınırlandırılacağını duyurdu.

Uygulama İçi Tarayıcı

Bazı uygulamalarda tıklanan linkler, Safari uygulamasına geçilmeden uygulama içinde UIWebView ya da WKWebView adlı arayüz bileşenleri ile açılabilir.
Bu şekilde uygulama içinde açılan sayfalardaki linkler takip edilerek başka sayfalara gidildiğinde, tüm bu browsing aktivitesi uygulama tarafından izlenebilir.
Daha önceden yapılan ya da gelecekte yapılacak olan browsing aktiviteleriyle ilişkilendirilebilir.

Apple, iOS 9 ile birlikte bu soruna çözüm olabilecek SFSafariViewController adlı bileşeni tanıtmıştı.
SFSafariViewController ile gerçekleştirilen browsing aktivitesi uygulama tarafından okunamıyor. Fakat Apple bu bileşenin kullanımını zorunlu tutmadığı için, hâlâ WKWebView kullanan uygulamalar mevcut.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Fingerprinting

Sadece iOS cihazlara özgü olmamakla birlikte, cihazdan elde edilmesi mümkün olan anlık ya da kalıcı her türlü verinin toplanması ile kullanıcının tespit ve takip edilmesi söz konusu olabilir.
Bu veriler; seçili dil ve bölge ayarları, saat dilimi, cihaz modeli, depolama kapasitesi, boş depolama yüzdesi, boş bellek yüzdesi, batarya doluluk yüzdesi, şarj kablosunun takılı olup olmaması, operatör bilgisi, cihaz adı, Apple Watch pairing durumu, bağlantı türü, IP adresi, erişim izinleri gibi şeylerdir.

Cihaz Adı

Cihaz adı, cihazın iTunes, AirDrop ve Find My iPhone gibi yerlerde görüntülenen adıdır.
Genelde Ali'nin iPhone'u Ayşe'nin iPad'i gibi kullanıcının adı ve cinsiyeti hakkında ipucu verebilecek şekildedir.
Cihazda çalışmakta olan tüm uygulamalar tarafından herhangi bir izin gerektirmeden okunabilir.
Ayarlar > Genel > Hakkında ekranından ayarlanabilir.

Güncelleme: Apple WWDC 2022 etkinliğinde, iOS 16'dan itibaren User Assigned Device Name (Kullanıcı tarafından belirlenmiş cihaz adı) entitlement'ın zorunlu kılınacağını açıkladı. Böylece, cihaz adına erişim sağlayan uygulamaların bunu neden yaptıklarını Apple'a açıklamaları gerekecek.

Operatör

Cihaza takılı SIM kartın operatör adı ve kodu, tüm uygulamalar tarafından doğrudan okunabilir.
Böylece kullanıcı profili hakkında ipucu elde edilebilir.
Ayrıca başka ülkelere gidildiğinde, hiç internet bağlantısı yapılmasa bile SIM kart değişikliği sonrası yeni operatör bilgisi kullanıcının hangi ülkeye gittiğine dair ipucu verebilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2022 etkinliğinde, iOS 16'dan itibaren operatör adı bilgisinin kaldırıldığını ve tüm cihazlarda "--" olarak döndürüleceğini duyurdu.

NSNull

NSNull, null değerleri temsil eden ve [NSNull null] ile erişilen bir singleton'dır.
Fakat NSNull singleton'ı, uygulama özelinde değil sistem genelinde varlığını sürdürür.
Bu nedenle farklı uygulamalardan pointer değeri yazdırılıp incelenirse aynı adres olduğu gözlemlenebilir.
Bu değer yalnızca cihaz yeniden başlatıldığı zaman değişecek, aksi takdirde sürekli aynı kalacaktır.

Elde edilen 0x1ebe1bc30 gibi adres değerlerinin birebir aynı olması, aynı geliştiriciye ait olmayan uygulamalar arasında bile kullanıcı tespit ve takibine olanak sağlayabilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

IDFA

Identifier for Advertisers (IDFA), kullanıcıları takip etmek ve ilgili reklamlar sunabilmek için Apple'ın uygulama geliştiricilere sunduğu resmî yöntemdir.
Maalesef, iOS 13'te dahi hâlâ doğrudan aktif olarak gelmektedir.
iOS'in Ayarlar > Gizlilik > Reklam ekranı altındaki Reklam Takibini Sınırla seçeneği ile devre dışı bırakılabilir.

IDFA değeri iOS 10'a kadar, devre dışı bırakan kullanıcılarda bile uygulama geliştiricilerin erişimine açıktı.
Apple, herhangi bir teknik kısıtlama koymaksızın, uygulama geliştiricileri yalnızca kullanıcının tercihine saygı duymaya davet ediyordu.
IDFA değeri iOS 10 ile birlikte ayarlardan devre dışı bırakan tüm kullanıcılar için 00000000-0000-0000-0000-000000000000 olacak şekilde güncellendi.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Güncelleme: Apple WWDC 2020 etkinliğinde, iOS 14.5'te kullanıcıları takip etmek ve IDFA değerine erişebilmek için yeni bir izin türü olacağını duyurdu.

Keychain - iCloud - GameCenter

Kullanıcı adı ve parolalar gibi hassas verilerin encryption ile saklandığı Keychain, cloud data servisi iCloud ve oyun servisi Game Center gibi sistemler, uygulamalar silinip yeniden yüklendikten sonra bile kullanıcıyı tanıyabilme imkanı sunarlar.
Bu durum, login gerektiren bazı uygulamalarda kullanıcıya kolaylık sağlayabiliyorken, kullanıcı henüz login olmadan (ya da farklı bir hesap ile login olduğunda), habersiz bir şekilde tespit ve takip amacıyla da kullanılabilir.
Local Keychain'de saklanan veriler ancak cihaza reset atıldığında temizlenirken, iCloud ve Game Center verileri kullanıcı iOS Ayarlar'dan logout olmadıkça erişilebilir durumdadır.

Özet

Bunlar kötü amaçlı uygulama geliştiricilerin ya da uygulamalardaki çeşitli SDK'lerin neler yapabileceğinin bazı örnekleri.
Apple düzenli olarak bazı uygulamaları kuralları ihlal ettiği için App Store'dan kaldırıyor ve hatta bazen Apple Developer Program üyeliklerini sonlandırıyor.
Ancak bu genellikle söz konusu sorun son kullanıcılar tarafından bildirilirse ya da inceleme ekibi tarafından tesadüfen tespit edilirse gerçekleşiyor.
Bu nedenle, her gün kullandığımız sistemleri iyi bilmekte ve tedbiri elden bırakmamakta fayda var.

Essential Standards Every Software Engineer Should Know

In software engineering, many problems are solved more easily when everyone agrees on the same way to represent things. That's where standards come in. They ensure consistency across systems, programming languages, and platforms. Here are some essential ones every software engineer should know:

ISO 8601 - Representation of dates and times

If you've ever struggled with confusing date formats like 03/04/05, you'll appreciate ISO 8601. It defines a universal way to represent dates and times, like 2020-01-26T17:45:06Z. Using it avoids ambiguity and keeps your data globally consistent.

ISO 639 - Language Designator

This standard assigns two- or three-letter codes to languages, such as en for English or ja for Japanese. It's used in applications, websites, and APIs to mark content with the right language. Without it, multilingual systems would be a mess.

ISO 15924 - Script Designator

Not all languages share the same writing system, and ISO 15924 solves that by giving each script a code. For example, Latn stands for the Latin alphabet and Cyrl for Cyrillic. This is especially important for internationalization and typography handling.

ISO 3166 - Country / Territory / Region Designator

When you see US for the United States or JP for Japan, that's ISO 3166 at work. It standardizes country codes used in everything from domain names to payment systems. Without it, global commerce and data exchange would be chaotic.

RFC 5646 - IETF Language Tag

This builds on ISO standards to create detailed language tags like en-US (American English) or zh-Hant (Traditional Chinese). It's widely used in web development to identify languages and regions with precision.

IEEE 754 - IEEE Standard for Floating-Point Arithmetic

Every time you perform a calculation with decimals in code, you're relying on IEEE 754. It defines how floating-point numbers are represented and how operations like addition and division behave. Knowing this helps explain why 0.1 + 0.2 might not equal 0.3 in many systems.

ISO/IEC 10646 - Universal Coded Character Set (Unicode)

This is the backbone of Unicode, the standard that makes emojis, accented characters, and scripts from all over the world work seamlessly across systems. Without it, text encoding would still be fragmented and inconsistent, like in the old days of ASCII vs. Shift-JIS vs. ISO-8859.

--

Mastering these standards won't just make you a better engineer, it will make your work more robust and future-proof.