iphone2android 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,127 @@
1
+ Metadata-Version: 2.4
2
+ Name: iphone2android
3
+ Version: 0.1.0
4
+ Summary: Move from an iPhone to an Android phone: messages, contacts, photos, apps and the home screen, from an encrypted iPhone backup
5
+ Author: Konstantinos Georgiou
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/drkostas/iphone2android
8
+ Keywords: iphone,ios,android,migration,backup,adb,sms,launcher
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: Topic :: Utilities
11
+ Requires-Python: >=3.9
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: iOSbackup>=0.9.9
15
+ Requires-Dist: pycryptodome>=3.18
16
+ Provides-Extra: test
17
+ Requires-Dist: pytest>=8; extra == "test"
18
+ Dynamic: license-file
19
+
20
+ # iphone2android
21
+
22
+ iphone2android moves your data from an iPhone to an Android phone using an encrypted iPhone backup on your computer and `adb` to the new phone. It converts messages, call history, contacts, calendars and bookmarks into formats Android and Google import, copies photos and the media Google Photos does not keep, installs your apps, and rebuilds your iPhone home screen on the Android launcher.
23
+
24
+ ## Before you wipe the iPhone
25
+
26
+ Some things cannot be recovered from any backup, so move them while the iPhone still works.
27
+
28
+ - Authenticator apps. Export the accounts from the iPhone app (Google Authenticator has Transfer accounts) and scan them on Android.
29
+ - Passwords in the iCloud Keychain. A backup cannot decrypt them, because every item is also sealed with a key that never leaves the iPhone. Use a password manager or a Mac signed in to the same Apple ID to export them.
30
+ - Tickets and passes bound to the device (transit tickets, ski passes). Move them through the provider's account.
31
+ - Footage that exists only on the phone in apps such as action-camera apps.
32
+
33
+ ## Install
34
+
35
+ ```bash
36
+ pip install iphone2android
37
+ ```
38
+
39
+ You also need `adb` (`brew install android-platform-tools` on macOS) with USB debugging on in the phone's developer options.
40
+
41
+ ## 1. Make an encrypted backup
42
+
43
+ In Finder (or iTunes on Windows) select the iPhone, choose "Back up all of the data on your iPhone to this Mac", tick "Encrypt local backup" and back up. Only an encrypted backup contains messages, call history and app data.
44
+
45
+ ```bash
46
+ iphone2android backups # list the backups on this computer
47
+ iphone2android apps # the apps that were installed (no password needed)
48
+ ```
49
+
50
+ On Windows, pass `--backup-root "%APPDATA%\Apple Computer\MobileSync\Backup"`.
51
+
52
+ ## 2. Extract and convert
53
+
54
+ ```bash
55
+ iphone2android extract --inventory # asks for the backup password (or set IPHONE_BACKUP_PASSWORD)
56
+ iphone2android convert --out android-import
57
+ ```
58
+
59
+ | File | Import it with |
60
+ |---|---|
61
+ | `sms_backup.xml`, `calls_backup.xml` | the SMS Backup & Restore app on the phone (Restore, then choose the file) |
62
+ | `contacts.vcf` | Google Contacts (Import) |
63
+ | `calendar.ics` | Google Calendar (Settings, Import & export) |
64
+ | `safari_bookmarks.html` | Chrome on a computer (Bookmarks, Import), then sync |
65
+
66
+ Apple sometimes saves the message database in the middle of a write, so the backup copy is shorter than its own header says and SQLite refuses to open it. `convert` corrects the header in a copy and reads what is there. If that is not enough and your `sqlite3` has the `.recover` command, it uses that instead.
67
+
68
+ WhatsApp chats (`ChatStorage.sqlite`) need a dedicated iOS to Android WhatsApp migrator, and Apple Notes (`NoteStore.sqlite`) need an Apple Notes parser. `extract` copies both out for those tools.
69
+
70
+ ## 3. Photos and media
71
+
72
+ ```bash
73
+ iphone2android media camera-roll message-attachments photo-edits
74
+ ```
75
+
76
+ Files are decrypted in batches, pushed to the phone and deleted, so the computer does not need room for the whole camera roll. If your photos are already in Google Photos, skip `camera-roll`. The other two are never in Google Photos (iMessage attachments, and the edited versions of photos).
77
+
78
+ ## 4. Apps
79
+
80
+ Write a mapping from iPhone bundle ids to Android packages, using `iphone2android apps` for the list. `label` is the app's name in the Android app drawer.
81
+
82
+ ```json
83
+ {"net.whatsapp.WhatsApp": {"package": "com.whatsapp", "label": "WhatsApp"}}
84
+ ```
85
+
86
+ Check every package before installing. Guessed package names are often wrong, because the Android package of a bank or a local app rarely matches its iOS bundle id.
87
+
88
+ ```bash
89
+ iphone2android verify mapping.json
90
+ iphone2android install --mapping mapping.json
91
+ ```
92
+
93
+ `install` opens each app's page in the Play Store app and presses Install, so it works for free apps only. Each app is checked as installed before the next one starts.
94
+
95
+ To remove preinstalled apps you do not want, list them in a file and run `iphone2android debloat list.txt --keep-mapping mapping.json --dry-run`, then again without `--dry-run`. Apps are removed for the current user only, and `adb shell cmd package install-existing <package>` brings one back.
96
+
97
+ ## 5. Home screen
98
+
99
+ ```bash
100
+ iphone2android extract # also copies IconState.plist
101
+ iphone2android layout extracted/IconState.plist --mapping mapping.json > layout.json
102
+ iphone2android build layout.json --state build.json --autofill
103
+ ```
104
+
105
+ `layout.json` lists pages of apps and folders by their drawer name, which you can edit before building. The builder adds each app from the app drawer search, reads the screen again after every drop, and saves its progress so an interrupted build continues where it stopped. Then it puts each page in order one swap at a time, and finally turns the launcher's icon autofill on to close the gaps. Do not touch the phone while it runs.
106
+
107
+ Many launchers do not let adb change the layout directly (on ColorOS the launcher database and shortcut pinning are closed without root), so the builder moves icons through the screen the way a person does. It is tested on ColorOS 16 (OPPO Find X9 Pro). Other launchers name their menus differently and may need changes in `android/launcher.py`.
108
+
109
+ ## Limits
110
+
111
+ - Only an encrypted backup has messages and app data.
112
+ - Keychain passwords cannot be extracted (see above).
113
+ - Paid apps are not installed.
114
+ - The home screen builder is tested on one launcher.
115
+
116
+ ## Development
117
+
118
+ ```bash
119
+ python -m venv .venv && .venv/bin/pip install -e '.[test]'
120
+ .venv/bin/pytest
121
+ ```
122
+
123
+ The tests use synthetic databases, a fake decryptor, a fake `adb` and a simulated home screen, so they need no iPhone and no Android phone.
124
+
125
+ ## License
126
+
127
+ MIT. Backup decryption uses [iOSbackup](https://github.com/avibrazil/iOSbackup) (LGPL).
@@ -0,0 +1,20 @@
1
+ iphone2android/__init__.py,sha256=kcl0cW2gxxRAHhCwGZasW0q-1mDqdPUC00oOa4SeTgA,124
2
+ iphone2android/__main__.py,sha256=k1ocEWawweo1qCJWNFAAvyxz3tcY13dzvCenHszij30,48
3
+ iphone2android/backup.py,sha256=mnfk3RX3itJQwumB7xo8br8iJx0aEnbxQ3BsMTz_lhQ,6190
4
+ iphone2android/cli.py,sha256=nDl3QkwXrUcbvxDojmPMMdCd7SUdLBxRAnb5EEQ0mt8,7978
5
+ iphone2android/convert.py,sha256=v-A_kCryaH8Dtd0sQwUYYpaV17n6l5MnMMRBRbcZn08,9142
6
+ iphone2android/layout.py,sha256=u8KP2Ugtw7VcRMjimig23CBfyIvi3p-9tm4S6Zgtlj4,2681
7
+ iphone2android/media.py,sha256=Me2vR67_InEUOVHQv-BmzNZtySMqNI7KERAUmDqQZgo,2962
8
+ iphone2android/android/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ iphone2android/android/adb.py,sha256=jw4gvkpLKUNb7_GD5UF7uC2KZiyAoucHP-gcUg_5Xnw,2011
10
+ iphone2android/android/build.py,sha256=mDWRxAJNN5TDeaw03PGMDaeERw4fRe39yIXOqZNcgco,4896
11
+ iphone2android/android/debloat.py,sha256=OuqrpM0NQhGLV_m-a7yCDmveiNqI_Axsu_-T0qnUItY,1590
12
+ iphone2android/android/launcher.py,sha256=DGAaLnCK7RCtaIkm3pjORNbVY8B_3SKv798IjpuHhyw,5632
13
+ iphone2android/android/play.py,sha256=mDgh8qUEuXq5A8QgnzTSVwfJFb2aG3pRqo6D48cFF5M,2608
14
+ iphone2android/android/ui.py,sha256=La9znxogezAqZUltN5dXwFHS4UGx2oVH0LxkBah4Nx0,1326
15
+ iphone2android-0.1.0.dist-info/licenses/LICENSE,sha256=y2yT4XOJ5hjMzENqKJShtqLiwI-IE1PnWqMxbhhL5r8,1078
16
+ iphone2android-0.1.0.dist-info/METADATA,sha256=2xaxsQZFWVF7bQMIt464PTgi1OePKKGdlt4tmkszhdg,6472
17
+ iphone2android-0.1.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
18
+ iphone2android-0.1.0.dist-info/entry_points.txt,sha256=VE4zimmpgUfInJhxY2QLW4yp8L0PDd3JsAmNzyUJnWI,59
19
+ iphone2android-0.1.0.dist-info/top_level.txt,sha256=JTsmLHU-1FdhJ-3B2MjqXrNZXlZB_QbHwzl4gllUa80,15
20
+ iphone2android-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ iphone2android = iphone2android.cli:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Konstantinos Georgiou
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ iphone2android