To solve this optimization problem, we need to define the decision variables, the objective function, and the constraints. 

Let's denote:
- $x_c$ as the number of sour cherry candies in the mixture.
- $x_p$ as the number of sour peach candies in the mixture.

The objective is to minimize the total cost, which can be represented by the equation: 
\[ \text{Minimize} \quad 0.10x_c + 0.12x_p \]

Given the constraints:
1. The special mix must contain at least 50 units of citric acid.
2. The special mix must contain at least 60 units of sugar.
3. There can be at most 10 sour cherry candies in the mixture.

These constraints can be mathematically represented as:
\[ 2x_c + x_p \geq 50 \] (citric acid constraint)
\[ 3x_c + 4x_p \geq 60 \] (sugar constraint)
\[ x_c \leq 10 \] (sour cherry candies limit)

All variables are non-negative since we cannot have a negative number of candies:
\[ x_c, x_p \geq 0 \]

Now, let's translate this problem into Gurobi code in Python:

```python
from gurobipy import *

# Create a new model
m = Model("Candy_Mix")

# Define the decision variables
x_c = m.addVar(lb=0, name="sour_cherry_candies")
x_p = m.addVar(lb=0, name="sour_peach_candies")

# Set the objective function to minimize costs
m.setObjective(0.10*x_c + 0.12*x_p, GRB.MINIMIZE)

# Add constraints
m.addConstr(2*x_c + x_p >= 50, name="citric_acid_constraint")
m.addConstr(3*x_c + 4*x_p >= 60, name="sugar_constraint")
m.addConstr(x_c <= 10, name="sour_cherry_limit")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Sour Cherry Candies: {x_c.x}")
    print(f"Sour Peach Candies: {x_p.x}")
    print(f"Total Cost: ${0.10*x_c.x + 0.12*x_p.x:.2f}")
else:
    print("No optimal solution found")
```