I'm making an assumption that your app is the same on both platforms. If not, this is a much bigger challenge.
We've divided the layers of our software test code with Cucumber into the following
Cucumber Feature File
Step Defs
Navigation layer
Screen Objects
Appium Driver calls
The navigation layer are composite actions taken upon a screen or screens to perform some task. You may find you want to embed those into your Step Definitions. I find it's cleaner this way.
Your navigation layer might be different between iOS and Android if you take actions that involve operations outside of your app. If so, then you'll detect the platform at that layer and branch accordingly. If your screen objects and navigation is all the same on both platforms, you can make the branch inside of the screen object code.