The production of beneficial public goods is common in the microbial world, and so is cheating – the exploitation of public goods by nonproducing mutants. Here, we examine co-evolutionary dynamics between cooperators and cheats and ask whether cooperators can evolve strategies to reduce the burden of exploitation, and whether cheats in turn can improve their exploitation abilities. We evolved cooperators of the bacterium Pseudomonas aeruginosa, producing the shareable iron-scavenging siderophore pyoverdine, together with cheats, defective in pyoverdine production but proficient in uptake. We found that cooperators managed to co-exist with cheats in 56% of all replicates over approximately 150 generations of experimental evolution. Growth and competition assays revealed that co-existence was fostered by a combination of general adaptions to the media and specific adaptions to the co-evolving opponent. Phenotypic screening and whole-genome resequencing of evolved clones confirmed this pattern, and suggest that cooperators became less exploitable by cheats because they significantly reduced their pyoverdine investment. Cheats, meanwhile, improved exploitation efficiency through mutations blocking the costly pyoverdine-signalling pathway. Moreover, cooperators and cheats evolved reduced motility, a pattern that likely represents adaptation to laboratory conditions, but at the same time also affects social interactions by reducing strain mixing and pyoverdine sharing. Overall, we observed parallel evolution, where co-existence of cooperators and cheats was enabled by a combination of adaptations to the abiotic and social environment and their interactions.