Hace tiempo hice algo parecido, no para apps pero si para activar funcionalidades dentro de un SW...
Según si contemplas comunicación externa o no, hay diferentes opciones.
La app se conecta con un servidor cada vez que arranca, y según la respuesta del mismo (autorizado/denegado) funcionará normalmente o pide el nuevo código. Una vez introducido el nuevo código, se manda al servidor el cual lo valida y en caso afirmativo vuelve a empezar a contar el periodo de 30 dias
Si lo quieres sin servidores externos, la app puede guardar un fichero interno con información (codificada o no) de la fecha de activacion, y cada vez que arranca consulta si está dentro del período válido. Cuando caduca, se le introduce el nuevo código (la app debe tener algún criterio para saber si este código es válido o no) y una vez validada, crea un nuevo fichero.
Ambas opciones se pueden implementar de manera simple o más compleja según la naturaleza de la app, si es de distribución masiva o para un grupo controlado de usuarios, etc...