Hello,
There is two modes for ManageGPO command: set a level (GPO/RF_USER) or send a pulse (GPO/RF_INTERRUPT).
In RF_INTERRUPT mode, the GPO pin level will stays active (low level in case of ST25DVxx-IE) for a few micro seconds after the End Of Frame of the ManageGPO response. The duration of the pulse is set with the IT_TIME configuration register and can vary from 301us to 37us. In order to trigger the pulse, the "GPOVAL" parameter of the ManageGPO command shall have its MSB set to 1 (i.e. 0x80).
In RF_USER mode, the GPO pin level is permanently set to either active or inactive state right after EOF of the ManageGPO response. Permanently, means until the level is changed again by a new ManageGPO command, the tag is not powered anymore, or the GPO output is disabled. The level is set with the GPOVAL byte parameter of the ManageGPO command. Set it to 0x01 to set GPO pin to active level (low in case of ST25DVxx-IE) or 0x00 to set GPO to released state (high in our case).
So, in case you want to have a pulse duration > 50ms, you need to use the ManageGPO command in RF_USER mode. You can send a first ManageGPO command to set GPO to low level, then wait a few ms and send a second ManageGPO command to set GPO level to high. Nevertheless, I think it will be difficult to achieve exact timing with iOS, since I'm not sure you can control exactly the timing between two commands. You also have to take into account the duration of the second ManageGPO command, since the GPO level will be set back to 1 only at the end of the response of the command. In non addressed mode, the ManageGPO command + response duration is about 3.8ms, and in addressed mode it is about 6.2ms
Please note that in order to use the ManageGPO command, you will need first to enable the RF_USER and the GPO output in the GPO static register (RF_USER_EN bit 0 and GPO_EN bit 7).
Best regards.