I had the same problem with the LED Arduino example sketch (on a nano 33 IoT) shown above in that it worked using the nRFConnect and Light Blue android apps. Both said the characteristic was read & write. In AppInventor, if I used the WriteBytes method, it did not work. Further, it returned the result of the 'CanReadCharacteristic' call as FALSE. However, if I changed the WriteBytes call to WriteBytesWithResponse, the 'CanReadCharacteristic' now returns TRUE and the app responds when writing. One more interesting observation was that I ran the following on the Arduino;
if(switchCharacteristic.canWrite())
Serial.println("led can be written");
else
Serial.println("led canNOT be written");
byte led_properties = switchCharacteristic.properties();
if(led_properties & BLERead)
Serial.println("led is readable");
if(led_properties & BLEWrite)
Serial.println("led is writable");
if(led_properties & BLENotify)
Serial.println("led is notifiable");
Serial.print("led_properties value is = ");
Serial.println(led_properties);
with the following results;
led canNOT be written
led is readable
led is writable
led_properties value = 10 // 0x0a
not sure therefore if it's an appinventor issue or an Arduino library issue.