To solve this optimization problem, we first need to translate the natural language description into a symbolic representation. The variables in this problem can be represented symbolically as follows:
- $x_1$ represents the amount of bananas.
- $x_2$ represents the number of apples.

The objective function described is to maximize $6.16x_1 + 1.89x_2$, which represents maximizing the total value obtained from bananas and apples, where each banana contributes $6.16 to the total value and each apple contributes $1.89.

The constraints given in the problem can be translated into the following symbolic representation:
1. The cost constraint: $3x_1 + 4x_2 \geq 28$ (minimum spend of $28) and $3x_1 + 4x_2 \leq 41$ (maximum spend of $41).
2. The fiber constraint: $2x_1 + x_2 \geq 12$ (at least 12 grams of fiber) and $2x_1 + x_2 \leq 29$ (no more than 29 grams of fiber).
3. The mixed constraint: $10x_1 - 4x_2 \geq 0$.

The symbolic representation of the problem is:
```json
{
    'sym_variables': [('x1', 'bananas'), ('x2', 'apples')],
    'objective_function': '6.16*x1 + 1.89*x2',
    'constraints': [
        '3*x1 + 4*x2 >= 28',
        '3*x1 + 4*x2 <= 41',
        '2*x1 + x2 >= 12',
        '2*x1 + x2 <= 29',
        '10*x1 - 4*x2 >= 0'
    ]
}
```

Now, let's write the Gurobi code to solve this optimization problem:
```python
from gurobipy import *

# Create a model
m = Model("Optimization_Problem")

# Define variables
x1 = m.addVar(lb=0, name="bananas")
x2 = m.addVar(lb=0, name="apples")

# Set the objective function
m.setObjective(6.16*x1 + 1.89*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*x1 + 4*x2 >= 28, "Minimum_Spend")
m.addConstr(3*x1 + 4*x2 <= 41, "Maximum_Spend")
m.addConstr(2*x1 + x2 >= 12, "Minimum_Fiber")
m.addConstr(2*x1 + x2 <= 29, "Maximum_Fiber")
m.addConstr(10*x1 - 4*x2 >= 0, "Mixed_Constraint")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Bananas: {x1.x}, Apples: {x2.x}")
    print(f"Objective function value: {m.objVal}")
else:
    print("No optimal solution found.")
```