MIT App Inventor for iOS version 2.78.4 on TestFlight

Hello all,

Version 2.78.4 is now available for testing on TestFlight. It contains the following changes from the version in the App Store:

  • Add support for CheckedColor and UncheckedColor to the CheckBox component
  • Fix an issue in the CircularProgress component
  • Add titlecase block
  • Add support for MakeFullPath block in File component
  • Add multiselect support in ListView
  • Fix an issue related to ImageSprite origin when using the OrientationSensor
  • Make the text input in Notifier use black text on all themes
  • Add LastTimestamp property to LocationSensor

Build 3 adds the following fix:

  • Fix an error in the reporting of the BytesReceived event in the BluetoothLE component

Note that some features will need to be tested using ai2-test.appinventor.mit.edu since they are not yet in production App Inventor.

Regards,
Evan W. Patton, Ph.D.
Lead Software Engineer, MIT App Inventor

5 Likes

Great, thank you! :joy:

For what purpose, or in what context, might this be useful?
It would be great if we had a File.Exists method for iOS.

1 Like

Another suggestion would be for the Web.ResponseFileName method to also work on iOS — meaning that a path such as
var/mobile/Containers/Data/Application/ACED13D7-C417-4E34-A45C-084FBB999383/Library/Application Support/AppInventor/Downloads/app_inventor_1792221598134.m4a
would instead be
var/mobile/.../Downloads/"myFileName".m4a

1 Like

When I enable MultiSelect, the ListView.Selection and ListView.SelectionIndex methods do not return the correct value. They always return the item that was clicked last — regardless of whether it is actually selected or not.

Therefore, we must not use the ListView.Selection and ListView.SelectionIndex methods if MultiSelectis enabled. Instead, we should rely only on ListView.SelectedItems. However, in this case, we also require a corresponding counterpart: ListView.SelectedIndexItems.

I have tested whith Android the new property to LocationSensor and runs well, but for iOS I can not generate the IPA built in the Ai2 test-server. I receive this built error message:

Can you open this builder to the iOS platform?

Note: My AIA is an export file from the production Ai2 server.

I will look into putting the test deployment on the old iOS test server. We typically have not set up ai2-test to also publish iOS apps.

2 Likes

on https://iosbuildservertest.appinventor.mit.edu/
Btw, Android failed as well.

The same message server error in this server. Does not runs the iOS and Android builders in this old server iOS-test.

I just updated the test server. It should allow for iOS builds targeting the same build as 2.78.4.

1 Like

Ok. Now the old iOS-test server: https://iosbuildservertest.appinventor.mit.edu built the iOS-IPAs. I can test the new sensorlocation.timestamp block in the iOS platform to manage the cache locations.

The new LocationSensor lastTimeStamp property is running well in both platforms (iOS and Android). To can verify the possible cache locations in a real environment I need more time to do different tests in several locations and times.

Annexe of

xx.aia (24,3 KB)

my AIA to test a trace geolocations of the LocationSensor.

Yes, but unfortunately the old iOS test server has a 30MB limit (and not 50MB like the main and code2 server).

@Anke I looked into the ListView MultiSelect behaviour.

Selection and SelectionIndex returning the last clicked item is intentional, on both Android and iOS. With MultiSelect on, they report the row the last tap changed, even if that tap deselected it. AfterPicking also fires for every tap. This comes from the original MultiSelect design, where you had to keep your own list of selected items and needed to know which row was just tapped. It's described in the docs: "Read SelectedItems for what is selected now."

For example, tap Apple, then Banana, then Apple again. After the last tap, Selection is still "Apple" (index 1) even though Apple was just deselected, while SelectedItems is ["Banana"].

Until there is an index list, you can tell whether the last tap selected or deselected a row by checking, in AfterPicking, whether ListView.Selection is in ListView.SelectedItems. That doesn't work if two items have the same text.

I agree there should be an index version of SelectedItems. Both platforms already store the selection as indexes internally, so adding a SelectedIndices property is a small change. I'll open an issue and a PR for it.

CC: @ewpatton

1 Like

If you want to go ahead and implement a property like that, that's fine. However, we are about to do a release so it won't be in the version going out this week.

1 Like

I have found a solution to handle the problem.

On the main server and code2 server?

Both.

1 Like

I found one: :joy:

But...