[GAS] What is the best way to spawn/despawn a "magic shield" Actor with collision when a GameplayEffect is applied/removed

If anyone stumbles upon this thread and wants to know, further reading seemed to indicate that Gameplay Effects in GAS are intended to be data only. Gameplay logic should only exist in Gameplay Abilities, from what I gather.

Thus, the solution to have some logic being run when a Gameplay Effect is applied is indeed to set up a Grant Gameplay Abilities component:

That Gameplay Ability can then auto-activate upon being granted using this code:

void UMyGameplayAbility::OnAvatarSet(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec)
{
	Super::OnAvatarSet(ActorInfo, Spec);

	if (bActivateAbilityOnGranted)
	{
		ActorInfo->AbilitySystemComponent->TryActivateAbility(Spec.Handle, false);
	}
}

For my specific use case, an auto-activated Gameplay Ability granted by the Gameplay Effect handles the spawning of the “magic shield” Actor, then uses the Wait For Gameplay Effect Removed ability task to know when the Gameplay Effect is removed and handle the destruction of the “magic shield” Actor.

I hope posting this final resolution helps someone in the future!