You can make a difference in the Apple Support Community!

When you sign up with your Apple Account, you can provide valuable feedback to other community members by upvoting helpful replies and User Tips.

💡 Did you know?

⏺ If you can't accept iCloud Terms and Conditions... Learn more >

⏺ If you don't see your iCloud notes in the Notes app... Learn more >

Looks like no one’s replied in a while. To start the conversation again, simply ask a new question.

Latest iOS software update made app and files inaccessible

Hi guys,


So I've been using the TextPad app for years now, never thinking that a simple text editor would be broken by an iOS update. Now after the latest iOS update, I have a bunch of files in said app that I use daily and now cannot access unless the author updates the app (which I'm thinking isn't going to happen)


Is there any way to extract the files so I can add them to a native text editor, or is there a way I can roll back my iPhone to the previous update where the app still worked?


Any help is appreciated.


Thank you!


iPhone 8, iOS 14

Posted on May 19, 2021 5:38 PM

Reply
Question marked as Top-ranking reply

Posted on May 19, 2021 6:00 PM

Unfortunately, on your phone with the newest update, your only option is to reach the developer. If you can't reach the developer, your only other option is to try to access your files on a device which has a supported version on it.

15 replies

May 19, 2021 5:44 PM in response to CoachDM688

If an app developer, who is a 3rd party abandons support for their app, you'd have to reach out to them for your data. Apple doesn't have access to anything inside a 3rd party app, nor are they responsible if a developer stops supporting their app. Contac them for help as they are the only ones who can help you.


Now if you happen to have a device which you haven't yet updated and can open the app on that device, you can try to get your files off it there.

May 19, 2021 5:47 PM in response to CoachDM688

As you have learned, it is the app developers' responsibility to keep their apps current and work with Apple's iOS releases. Just FYI - Apple shares the updates with developers first until a final version is released. This gives the developers an opportunity to tweak and update their apps to work with the upcoming update. I recommend that you contact the support team of your app's developer(s) and get the issue addressed.

The answer to your second question about rolling back to the previous iOS version, is that you are not going to be able to do that. At this time, you can only update but not regress to a previous version.


Axel F.

Jun 5, 2021 11:08 AM in response to CoachDM688

I've been using this app for some 8 years now and have lots of very important (to me) data. I was able to recover all of my TextPad data. Here is how.


First I downloaded the IMazing App from https://imazing.com/ for my iMac and bought the minimal 1 device license for $35 needed to use the "Export Raw Files" option.


Then plugged in my iPhone to my iMac. In the app there is an "Export Raw Files" button hiding in this list of options (right center) toward the bottom of the list. When you select this it may ask for your (Mac password multiple times) and it asks for an output directory name. It creates a subdirectory under the name you give it and another subdirectory named after your iPhone's name. This folder will contain all the raw files for all the applications. In that subdirectory locate "AppDomain-us.amitay.textpad". Beneath that folder under "/Library/Application Support/TextPad" you will find "TextPad.sqlite".


If you only have a few entries you can install "brew install --cask db-browser-for-sqlite" and use this SQLite browser and open the above sqlite file and look in the ZTEXT column and all your data will be there for each tab. Alternatively you can run the script below which will extract each tabs data into a file named after the first line contents (if < 30 chars and not containing '/'). In that case it names it 'Tab # problem name' but still extracts the full contents into the file.


I called this script getMyData.py and it is run passing it the full path to where ever your sqlite file is located. e.g.


$ getMyData.py "{IMazingBackupDir}/{PhoneName}/AppDomain-us.amitay.textpad/Library/Application Support/TextPad/TextPad.sqlite"


python script below

--------------------------

import sqlite3,os,sys


if len(sys.argv) != 2:

print("pass in sql file name")

sys.exit(1)


db = sys.argv[1]


if not os.path.exists(db):

print("Path to db '",db,"' does not exist")

sys.exit(1)


connection = sqlite3.connect(db)


cursor = connection.cursor()

rows = cursor.execute("SELECT ZTEXT from ZTPNOTE").fetchall()


i=0

ar=[]

for row in rows:

i+=1

ar = str(row[0]).split('\n')

tab=ar[0]

if len(tab) > 30 or r"/" in tab:

tab = "Tab "+str(i)+" problem name"


print("Extracting Tab>>",tab)

f = open(tab,"w")

for s in ar:

f.write(s)

f.write('\n')

f.close()


sys.exit(0)



I hope you find this useful.

Jun 5, 2021 6:45 PM in response to swcustodian

Full disclosure: I'm a total noob when it comes to running scripts on a Mac.


I created the file "getMyData.py" using the code you provided on my desktop.

I modified the path in the command line (is that the right term?) to use the full path to the TextPad files as described.

I opened the Terminal app and changed to the Desktop directory where I created the PY file.

Tried running that command via the Terminal app and it doesn't do anything that I can see.

Could I please ask you for more help with this?

Jun 6, 2021 4:16 AM in response to CoachDM688

No problem, I work in the command line a good part of my day at work and sometimes forget about all the assumptions that I make.


Here are a few things that you need to check first. The $ sign below is supposed to indicate the Terminal App prompt and the text after it what you would type.


$ python --version

$ python3 --version


If like on my system the first command says 'Python 2.{something}' then there are 3 lines the the script that need to be modified. However, if the first command says 'Python 3.{something}' or the second command doesn't error and says 'Python 3.{something}' then the previous script should work using the appropriate python version. I installed Python 3 on my system and was using python3 as my prefix command.


The third option and harder to deal with is if you do not have python installed. In this case both the above commands will error with something like '-bash: python: command not found'. In this case you will have to navigate the hazardous waters of downloading and installing python3 from the web. This step is beyond what I can describe here and better documentation is probably already written online.


So first if you have python3, then here is a trick that will simplify running the command. Create a directory where you want your files output, such as your HomeDirectory/TextPad. Then copy the getMyData.py and the TextPad.sqlite to that directory. One problem command line commands have is when the paths to the files contain spaces, such as the 'Application Support' in the path to the sqlite file. If you forgot to enclose the path in double quotes it would not have worked. With everything colocated, now the command to execute will be much simpler with no special case spaces or quote required.


$ python3 getMyData.py TextPad.sqlite


This should extract and your files into the current directory.


Now for the special case of not having python3. There are only 3 lines that need modification, but as you stated not being a command line user, I am including the entire script here instead. I have bolded the changes. Python2 had issues with non-ascii characters.


import sqlite3,os,sys

import codecs


if len(sys.argv) != 2:

print("pass in sql file name")

sys.exit(1)


db = sys.argv[1]


if not os.path.exists(db):

print("Path to db '",db,"' does not exist")

sys.exit(1)


connection = sqlite3.connect(db)


cursor = connection.cursor()

rows = cursor.execute("SELECT ZTEXT from ZTPNOTE").fetchall()


i=0

ar=[]

for row in rows:

i+=1

ar = str(row[0].encode("utf-8")).split('\n')

tab=ar[0]

if len(tab) > 30 or r"/" in tab:

tab = "Tab "+str(i)+" problem name"


print("Extracting Tab>>",tab)

f = codecs.open(tab,"w")

for s in ar:

f.write(s)

f.write('\n')

f.close()


sys.exit(0)


Hopefully this will help you get past your hurdle.


One last possible problem. These python scripts load the non-standard python modules sqlite3 and the python2 version also needs codecs. I did not have to do anything to install them as they were already on my system. Should you get an error such as the following on either sqlite3 or codecs, you will need to somehow get them installed. Again the steps to do this are beyond what I can document here.


Traceback (most recent call last):

File "getMyStuff.py", line 3, in <module>

import codecs


Should all the above still fail, there is the possibility that your version of TextPad was different from mine and that the developer changed something, such as the name of the table or column in sqlite. I'm still willing to help you get to the bottom of this but I think in that case a more direct and private communication channel would be more appropriate.


If all else fails and you don't mind doing the work to separate the tabs into files and deal with trimming some junk strings. You can print your data to the screen with the following command.


$ strings TextPad.sqlite


and write it to a file with


$ strings TextPad.sqlite > aFileName


Then you can edit the file and figure out where each tab started and stopped and copy that to another application. The python scripts were intended to do all that work for you.




Latest iOS software update made app and files inaccessible

Welcome to Apple Support Community
A forum where Apple customers help each other with their products. Get started with your Apple Account.